
문제
자연수 N이 주어졌을 때, 2의 제곱수면 1을 아니면 0을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 N(1 ≤ N ≤ 2^30)이 주어진다.
출력
N이 2의 제곱수면 1을 아니면 0을 출력하는 프로그램을 작성하시오.
풀이 과정
1이 될 때 까지 N을 2로 나눴을 때 나머지가 0 외에 발생하지 않는다면 2의 제곱수이다.
2의 제곱수는 2가 여러 번 곱해진 꼴이기에, 2로 나눴을 때 나머지가 0 외에 발생한다면 2의 제곱수가 아니다.
C
#include <stdio.h>
int main(void) {
int n;
scanf("%d", &n);
int result = 1;
while (n > 1) {
if (n % 2 != 0) {
result = 0;
break;
}
n /= 2;
}
printf("%d", result);
return 0;
}
Python
n = int(input())
done = 0
while n > 1:
if n % 2 == 1:
done = 1
break
n //= 2
if done == 0: print(1)
else: print(0)
'-- 예전 기록 > BOJ' 카테고리의 다른 글
[ BOJ ] 25206 : 너의 평점은 ( SILVER 5 ) / C, Python (0) | 2023.11.07 |
---|---|
[ BOJ ] 10995 : 별 찍기 - 20 ( BRONZE 3 ) / C, Python (0) | 2023.11.07 |
[ BOJ ] 3029 : 경고 ( BRONZE 3 ) / C, Python (0) | 2023.11.07 |
[ BOJ ] 4740 : 거울, 오! 거울 ( BRONZE 3 ) / C, Python (0) | 2023.11.07 |
[ BOJ ] 23037 : 5의 수난 ( BRONZE 2 ) / C, Python (0) | 2023.11.06 |