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