用 C++ 檢查一個 b 進位制數 N 是否以 1 開頭


我們有一個數字 N 和一個基數 b。在這個程式中,我們要檢查這個數字在 b 進位制下是否以 1 開頭。假設給定數字為 6。在二進位制中它是 110,所以它以 1 開頭;在 4 進制中它是 124,它也以 1 開頭。

眾所周知,如果一個數字 N 用 b 進製表示,b 會轉換為 m+1 位序列 bm bm-1 … b0。這意味著 bm * bm + bm-1 * bm-1 + … + b0 * b0 = N。最大的數字將是 2 * bm – 1。N 的範圍在 bm ≤ N ≤ 2 * bm – 1 之間。現在需要注意的是,m 不能超過 $\lfloor\log_2 m\;\rfloor$,這是因為當我們將任何數字用 2 進製表示時,它會轉換為僅包含 0 和 1 的序列,因此此序列的長度將始終大於任何其他基數表示的長度,並且其長度將等於 $\lfloor\log_2 m\;\rfloor+1$。因此,要檢查給定的數字 N 是否以 b 進位制下的 1 開頭,我們將從 m = 1 遍歷到 m = $\lfloor\log_2 m\;\rfloor$,並檢查對於任何 m 值,N 是否在 bm ≤ N ≤ 2 * bm – 1 的範圍內,並相應地返回 True 或 False。

示例

線上演示

#include <iostream>
#include <cmath>
using namespace std;
bool isStartWithOne(int number, int base) {
   int m = log2(number);
   for (int i = 1; i <= m; i++) {
      if (number >= pow(base, i) && number <= 2 * pow(base, i) - 1) //if number is in the given range
   return true;
   }
   return false;
}
int main() {
int num = 19, base = 16;
   if(isStartWithOne(num, base)){
      cout << "Can be represented";
   }else{
      cout << "Can not be represented";
   }
}

輸出

Can be represented

更新於:2019年9月27日

瀏覽量:126

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告