检查数字N是否在C ++中的b基中以1开头
我们有一个数字N和一个底数b。在此程序中,我们必须检查数字是否以b开头的数字为1。假设数字为6。在二进制中它是110,所以它从1开始,在基数4中也将是12 4。这也是从1开始。
众所周知,如果在底数b中表示一个数字N,则b将转换为m + 1位序列bm bm-1…b0。这意味着b米b米+ B M-1 * B M-1 + ... + B 0 * B 0 = N.最大数量将是2 * B米- 1的N-在于b米≤N≤2 * b米– 1.现在要注意的另一件事是m不能超过$\ lfloor \ log_2 m \; \ rfloor $,这是因为当我们在base-2中表示任何数字时,它将转换为仅0和1s的序列,因此此序列的长度将始终大于任何其他基本表示形式,并且其长度将等于$\ lfloor \ log_2 m \; \ rfloor + 1 $。因此,要检查给定的数字N是否以b开头的1,我们将从m = 1遍历到m = $\ lfloor \ log_2 m \; \ 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
以上是 检查数字N是否在C ++中的b基中以1开头 的全部内容, 来源链接: utcz.com/z/321837.html