이 문제에서는 번호가 주어지고 그 번호가 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