检查给定编号是否可以用给定编号表示。C ++中任何基数的位数

假设我们有一个数字n和一个数字d。我们必须检查数字n是否可以表示为2到32之间任何基数的d位数字。假设数字n为8,并且d = 4,则可以将其表示为二进制数1000,此处d为4 。

这个想法是从2到32逐一检查所有基准。我们可以按照以下步骤检查基准。

  • 如果数字小于基数且数字为1,则返回true

  • 如果digit大于1并且number大于base,则通过执行num / base从数字中删除最后一位,从而减少位数,然后一次又一次地递归执行。

  • 否则返回false。

示例

#include <iostream>

using namespace std;

bool isRepresentedInDDigits(int num, int d, int base) {

   if (d==1 && num < base)

      return true;

   if (d > 1 && num >= base)

      return isRepresentedInDDigits(num/base, --d, base);

      return false;

}

bool checkNumber(int num, int d) {

   //一一检查所有基地

   for (int base=2; base<=32; base++)

      if (isRepresentedInDDigits(num, d, base))

         return true;

         return false;

}

int main() {

   int num = 8;

   int dig = 2;

   if(checkNumber(num, dig))

      cout << "Can be represented";

   else

      cout << "Can not be represented";

}

输出结果

Can be represented

以上是 检查给定编号是否可以用给定编号表示。C ++中任何基数的位数 的全部内容, 来源链接: utcz.com/z/335211.html

回到顶部