ホームページ  >  記事  >  バックエンド開発  >  C プログラムで同じ数の 1 と 0 を含む次に大きい数のバイナリ表現?

C プログラムで同じ数の 1 と 0 を含む次に大きい数のバイナリ表現?

PHPz
PHPz転載
2023-08-26 15:21:061240ブラウズ

C プログラムで同じ数の 1 と 0 を含む次に大きい数のバイナリ表現?

数値 n を表す 2 進数があるとします。 n より大きくて最小で、0 と 1 の数が同じである 2 進数を見つける必要があります。したがって、数値が 1011 (10 進数で 11) の場合、出力は 1101 (10 進数で 13) になります。この問題は、次の順列計算を使用して解決できます。このアイデアを得るアルゴリズムを見てみましょう。

Algorithm

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

の中国語訳は次のとおりです:

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);
}

Output

リーリー

以上がC プログラムで同じ数の 1 と 0 を含む次に大きい数のバイナリ表現?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。