Rumah >pembangunan bahagian belakang >C++ >Perwakilan binari nombor yang lebih besar seterusnya dengan nombor 1 dan 0 yang sama dalam program C?

Perwakilan binari nombor yang lebih besar seterusnya dengan nombor 1 dan 0 yang sama dalam program C?

PHPz
PHPzke hadapan
2023-08-26 15:21:061261semak imbas

Perwakilan binari nombor yang lebih besar seterusnya dengan nombor 1 dan 0 yang sama dalam program C?

Andaikan kita mempunyai nombor binari yang mewakili nombor n. Kita perlu mencari nombor binari yang lebih besar daripada n tetapi terkecil, dan yang juga mempunyai nombor 0 dan 1 yang sama. Jadi jika nombornya ialah 1011 (11 dalam perpuluhan), maka outputnya ialah 1101 (13 dalam perpuluhan). Masalah ini boleh diselesaikan menggunakan pengiraan pilih atur seterusnya. Mari lihat algoritma untuk mendapatkan idea ini. Terjemahan bahasa Cina bagi

algoritma

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

Contoh

ialah:

Contoh

#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

Binary value of next greater number = 1101

Atas ialah kandungan terperinci Perwakilan binari nombor yang lebih besar seterusnya dengan nombor 1 dan 0 yang sama dalam program C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam