检查数字N是否在C ++中的b基中以1开头
我们有一个数字N和一个底数b。在此程序中,我们必须检查数字是否以b开头的数字为1。假设数字为6。在二进制中它是110,所以它从1开始,在基数4中也将是124。这也是从1开始。
众所周知,如果在底数b中表示一个数字N,则b将转换为m+1位序列bmbm-1…b0。这意味着b米b米+BM-1*BM-1+...+B0*B0=N.最大数量将是2*B米-1的N-在于b米≤N≤2*b米–1.现在要注意的另一件事是m不能超过$\lfloor\log_2m\;\rfloor$,这是因为当我们在base-2中表示任何数字时,它将转换为仅0和1s的序列,因此此序列的长度将始终大于任何其他基本表示形式,并且其长度将等于$\lfloor\log_2m\;\rfloor+1$。因此,要检查给定的数字N是否以b开头的1,我们将从m=1遍历到m=$\lfloor\log_2m\;\rfloor$并检查是否有m的任何值,N位于范围b米≤N≤2*b米-1或不是,并相应地返回真或假。
示例
#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