检查数字N是否在C ++中的b基中以1开头

我们有一个数字N和一个底数b。在此程序中,我们必须检查数字是否以b开头的数字为1。假设数字为6。在二进制中它是110,所以它从1开始,在基数4中也将是12 4。这也是从1开始。

众所周知,如果在底数b中表示一个数字N,则b将转换为m + 1位序列bm bm-1…b0。这意味着bb+ 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

回到顶部