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

Biểu diễn nhị phân của số trước đó trong C ++

Trong bài toán này, chúng ta được cung cấp biểu diễn nhị phân của một số và chúng ta phải tìm biểu diễn nhị phân của số trước đó, tức là số được kết quả sau khi trừ một số khỏi số đã cho.

Biểu diễn nhị phân của một số đang thay đổi cơ số của số thành cơ số 2 và đại diện cho số chỉ sử dụng 0 hoặc 1.

Ví dụ:biểu diễn nhị phân của 23 là 10111.

Vì vậy, ở đây chúng ta sẽ được cung cấp một số, giả sử n ở dạng nhị phân. Và chúng ta phải tìm biểu diễn nhị phân của n-1.

Để giải quyết vấn đề này, chúng ta cần biết những điều cơ bản về phép trừ nhị phân. hãy xem điều gì sẽ xảy ra khi 1 bị trừ cho 0 hoặc 1 ở dạng nhị phân. - 1 =1 + 1 mang từ bit tiếp theo. 1 - 1 =0.

Hãy lấy một ví dụ để hiểu rõ vấn đề hơn,

Input : 101101100
Output : 101101011
Explanation : (101101100)2 Is the binary representation of 364. The number preceding it is 363 whose
binary representation is (101101011)2 . we have used binary subtraction here and subtracted (1)2 
from the binary representation of the number to yield the result .

Hãy xem logic đằng sau chương trình này và sau đó chúng tôi sẽ thiết kế một thuật toán dựa trên logic của chúng tôi. Ở đây, chúng ta cần trừ một số khỏi biểu diễn nhị phân của số. đối với điều này, chúng tôi sẽ bắt đầu từ bên phải và lật tất cả các số không thành 1 cho đến khi gặp phải số 1. Khi gặp 1, chúng ta sẽ lật 1 thành 0 và trả về kết quả cuối cùng.

Thuật toán

Step 1 : Start right to left i.e n-1 to 0.
Step 2 : If 1 is encounter change it to 0 and break.
Step 3 : If 0 is encountered, change it 1.
Step 4 : Print the array.

Ví dụ

Chương trình thực hiện thuật toán trên -

#include <bits/stdc++.h>
using namespace std;
string previousNumber(string num) {
   int n = num.size();
   if (num.compare("1") == 0)
      return "0";
      int i;
   for (i = n - 1; i >= 0; i--) {
      if (num.at(i) == '1') {
         num.at(i) = '0';
         break;
      } else
      num.at(i) = '1';
   }
   if (i == 0)
      return num.substr(1, n - 1);
      return num;
}
int main() {
   string number = "1011011000";
   cout<<"the Binary representation of the number is "<<number<<endl;
   cout<<"Binary representation of previous number is "<<previousNumber(number);
   return 0;
}

Đầu ra

The Binary representation of the number is 1011011000
Binary representation of previous number is 1011010111