用 C++ 將數字表示為儘可能少的偽二進位制數之和


本教程將討論如何將數字表示為儘可能少的偽二進位制數之和。偽二進位制數是指僅由二進位制數字(即 0 和 1)組成的數字。偽二進位制數的示例包括 00、11、10、100、111、1011 等。

以下是一些將數字表示為偽二進位制數之和的示例。

Input : 23
Output : 11 + 11 + 1
Explanation : 23 = 11 + 11 + 1, sum of pseudo-binary numbers(11, 11, 1) is 23.

Input : 50
Output : 10 + 10 + 10 + 10 + 10

查詢解決方案的方法

以下是查詢表示 N 的最小偽二進位制數的最佳方法之一。

  • 取一個數字 X,並根據數字 N 的數字將其數字更新為 1 或 0。

  • 檢查 N 的每個位置的數字,

    • 如果它是 0,則將 X 的該位置更新為 0。

    • 如果它不是零,則將 X 的該位置更新為 1。

    • 假設 N = 32,則 X 將為 11

  • 然後 X 將是一個偽二進位制數。

  • 現在用 X 減去 N 並重復步驟 1,直到 N 變為零。

示例

上述方法的 C++ 程式碼

#include<iostream>
using namespace std;
int main(){
   int N = 51;
   // find a pseudo-binary number until N becomes 0.
   cout << "pseudo-binary representation of " << N << " is: ";
   while (N > 0){                
      // finding X which contains 0's and 1's according to N.
      int temp = N;
      int X = 0, bit = 1;
      // checking each place of N for zero or non-zero.
      while (temp!=0){
      int last_dig = temp % 10;
      temp = temp / 10;
      if (last_dig != 0)
         X += bit;
         bit *= 10;
      }
      // printing one pseudo-binary number.
      cout << X << " ";
      // Updating N by subtracting with X.
      N = N - X;
       
   }
   return 0;
}

輸出

pseudo-binary representation of 51 is: 11 10 10 10 10

理解程式碼

  • 一個用於獲取 N 和在每個位置選擇數字以查詢 X 的外部 while 迴圈。

  • 我們使用 N 更新 temp 變數的值,以及用於檢查 temp 變數的每個位置並更新變數 X 的該位置的內部迴圈。

  • 列印 X 的值,因為這一個偽二進位制數。

  • 我們透過減去 X 更新 N,並再次進入外部迴圈,直到 N 變為 0。

結論

在本教程中,我們討論瞭如何將數字表示為儘可能少的偽二進位制數之和。我們討論了查詢所有偽二進位制數的方法。我們還討論了相應的 C++ 程式碼,我們可以在其他任何程式語言(如 C、Java、Python 等)中編寫。我們希望您覺得本教程有所幫助。

更新於: 2021-11-26

501 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告