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
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
#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] == '0' && bin[i+1] == '1') { 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] == '1' && bin[k] == '0') { char ch = bin[j]; bin[j] = bin[k]; bin[k] = ch; j++; k--; } else if (bin[i] == '0') 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
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!