이 문제에서는 번호가 주어지고 그 번호가 Woodall 수인지 아닌지를 확인하는 것이 우리의 임무입니다.
우달 숫자 형식의 특수 유형의 숫자입니다.
Wn = n.2n -1
처음 5개의 Woodall 숫자는 1, 7, 23, 63, 159입니다.
문제를 이해하기 위해 예를 들어보겠습니다.
입력
X = 159
출력
Yes
이 문제를 해결하기 위해 우리는 숫자를 관찰하고 숫자가 짝수이면 Woodall이 될 수 없으며 숫자를 확인합니다. 확인하려면 숫자를 1로 더하고 숫자를 재귀적으로 2로 나눕니다. 각 나눗셈 후에 나누어지는 횟수를 계산합니다. 그리고 각 지점에서 개수가 숫자와 같은지 확인합니다.
솔루션 구현을 보여주는 프로그램,
예시
#include <iostream>
using namespace std;
bool isWoodallNumber(int x){
if (x % 2 == 0)
return false;
if (x == 1)
return true;
x+= 1;
int p = 0;
while(x%2 == 0){
x = x/2;
p++;
if (p == x)
return true;
}
return false;
}
int main() {
int x = 1424;
cout<<x;
(isWoodallNumber(x))?cout<<" is a Woodal Number":cout<<" is not a Woodal Number";
return 0;
} 출력
1424 is not a Woodal Number