检查给定编号是否可以用给定编号表示。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