Computer >> Máy Tính >  >> Lập trình >> lập trình C

Biểu diễn nhị phân của số lớn hơn tiếp theo với cùng số 1 và 0 trong Chương trình C?

Giả sử chúng ta có một số nhị phân, đó là đại diện của một số n. Chúng ta phải tìm biểu diễn nhị phân của một số nhỏ nhất nhưng lớn hơn n, và nó cũng có cùng số 0 và 1. Vì vậy, nếu số là 1011 (11 ở dạng thập phân), thì kết quả đầu ra sẽ là 1101 (13). Vấn đề này có thể được tìm thấy bằng cách sử dụng phép tính hoán vị tiếp theo. Hãy để chúng tôi xem thuật toán để có được ý tưởng.

Thuật toán

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

Ví dụ

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

Đầu ra

Binary value of next greater number = 1101