首頁 >後端開發 >C++ >C程式中具有相同數量的1和0的下一個更大數字的二進位表示?

C程式中具有相同數量的1和0的下一個更大數字的二進位表示?

PHPz
PHPz轉載
2023-08-26 15:21:061271瀏覽

C程式中具有相同數量的1和0的下一個更大數字的二進位表示?

假設我們有一個二進制數,它表示一個數字n。我們需要找到一個二進制數,它比n大但是最小,而且它也有相同數量的0和1。所以如果這個數是1011(十進制為11),那麼輸出將是1101(十進制為13)。可以使用下一個排列計算來解決這個問題。讓我們看看獲取這個想法的演算法。

演算法

nextBin(bin) −

Begin
   len := length of the bin
   for i in range len-2, down to 1, do
      if bin[i] is 0 and bin[i+1] = 1, then
         exchange the bin[i] and bin[i+1]
         break
      end if
   done
   if i = 0, then there is no change, return
   otherwise j:= i + 2, k := len – 1
   while j < k, do
      if bin[j] is 1 and bin[k] is 0, then
         exchange bin[j] and bin[k]
         increase j and k by 1
      else if bin[i] is 0, then
         break
      else
         increase j by 1
      end if
   done
   return bin
End

Example

的中文翻譯為:

範例

#include <iostream>
using namespace std;
string nextBinary(string bin) {
   int len = bin.size();
   int i;
   for (int i=len-2; i>=1; i--) {
      if (bin[i] == &#39;0&#39; && bin[i+1] == &#39;1&#39;) {
         char ch = bin[i];
         bin[i] = bin[i+1];
         bin[i+1] = ch;
         break;
      }
   }
   if (i == 0)
   "No greater number is present";
   int j = i+2, k = len-1;
   while (j < k) {
      if (bin[j] == &#39;1&#39; && bin[k] == &#39;0&#39;) {
         char ch = bin[j];
         bin[j] = bin[k];
         bin[k] = ch;
         j++;
         k--;
      }
      else if (bin[i] == &#39;0&#39;)
         break;
      else
         j++;
   }
   return bin;
}
int main() {
   string bin = "1011";
   cout << "Binary value of next greater number = " << nextBinary(bin);
}

輸出

Binary value of next greater number = 1101

以上是C程式中具有相同數量的1和0的下一個更大數字的二進位表示?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除