檢查給定數字是否可以用 C++ 中的任意基數表示為給定數字位數


假設我們有一個數字 n 和數字位數 d。我們必須檢查數字 n 是否可以用 2 到 32 之間的任何基數表示為 d 位數字。假設數字 n 為 8,d 為 4,則它可以表示為二進位制的 1000,此處 d 為 4。

這個想法是從 2 到 32 一一檢查所有基數。我們可以遵循以下步驟來檢查基數。

  • 如果數字小於基數,並且數字位數為 1,則返回 true
  • 如果數字位數大於 1 且數字大於基數,則透過執行 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) {
   // Check for all bases one by one
   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

更新於: 2019年10月22日

107 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告