숫자 N과 밑수 b가 있습니다. 이 프로그램에서는 숫자가 b진법에서 1로 시작하는지 여부를 확인해야 합니다. 숫자 6이 주어졌다고 가정합니다. 바이너리에서는 110이므로 1로 시작하고 4진법에서도 124가 됩니다. . 여기에서도 1로 시작합니다.
우리가 알다시피, 숫자 N이 밑수 b로 표현되면 b는 m+1 비트 시퀀스 bm bm-1 … b0으로 변환됩니다. 이것은 bm를 의미합니다. b m + bm-1 * b m-1 + ... + b0 *b 0 =N. 가장 큰 수는 2*b m 입니다. – 1. N은 b m 에 있습니다. ≤ N ≤ 2*b m – 1. 이제 주목해야 할 또 다른 사항은 m이 $\lfloor\log_2 m\;\rfloor$를 초과할 수 없다는 것입니다. 이는 2진법에서 임의의 숫자를 나타낼 때 0과 1의 시퀀스로만 변환되기 때문입니다. 이 시퀀스의 길이는 항상 다른 기본 표현보다 크며 그 길이는 $\lfloor\log_2 m\;\rfloor+1$ 와 같습니다. 따라서 주어진 숫자 N이 b 밑수에서 1로 시작하는지 확인하기 위해 m =1에서 m =$\lfloor\log_2 m\;\rfloor$로 순회하고 m의 값에 대해 N이 있는지 확인합니다. 범위 b m ≤ N ≤ 2*b m – 1 여부에 따라 True 또는 False를 반환합니다.
예시
#include <iostream> #include <cmath> using namespace std; bool isStartWithOne(int number, int base) { int m = log2(number); for (int i = 1; i <= m; i++) { if (number >= pow(base, i) && number <= 2 * pow(base, i) - 1) //if number is in the given range return true; } return false; } int main() { int num = 19, base = 16; if(isStartWithOne(num, base)){ cout << "Can be represented"; }else{ cout << "Can not be represented"; } }
출력
Can be represented