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