Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

การแสดงผลแบบไบนารีของจำนวนก่อนหน้าใน C++


ในโจทย์นี้ เราได้รับการแสดงผลแบบไบนารีของจำนวนหนึ่ง และเราต้องหาการแสดงผลแบบไบนารีของจำนวนก่อนหน้า นั่นคือ จำนวนที่ได้หลังจากลบ 1 จากจำนวนที่กำหนด

การแสดงผลแบบไบนารี ของจำนวนคือการเปลี่ยนฐานของจำนวนเป็นฐาน 2 และแสดงจำนวนโดยใช้แค่ 0 หรือ 1

เช่น การแสดงผลแบบไบนารีของ 23 คือ 10111

ที่นี่ เราจะได้รับจำนวน สมมติว่า n ในรูปแบบไบนารี และเราต้องหาการแสดงผลแบบไบนารีของ n-1

เพื่อแก้ปัญหานี้ เราต้องรู้พื้นฐานการลบแบบไบนารี มาดูว่าจะเกิดอะไรขึ้นเมื่อลบ 1 จาก 0 หรือ 1 ในรูปแบบไบนารี: 0 - 1 = 1 + 1 carry จากบิตถัดไป, 1 - 1 = 0

มาดูตัวอย่างเพื่อเข้าใจปัญหาให้ดีขึ้น

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 .

มาดูตรรกะเบื้องหลังโปรแกรมนี้และออกแบบอัลกอริทึมจากตรรกะของเรา ที่นี่เราต้องลบ 1 จากการแสดงผลไบนารีของจำนวน สำหรับสิ่งนี้ เราจะเริ่มจากขวาและพลิก 0 ทั้งหมดเป็น 1 จนกว่าจะเจอ 1 เมื่อเจอ 1 เราจะพลิก 1 นั้นเป็น 0 และคืนค่าผลลัพธ์สุดท้าย

อัลกอริทึม

ขั้นตอนที่ 1 : เริ่มจากขวาไปซ้าย คือ n-1 ถึง 0 ขั้นตอนที่ 2 : หากเจอ 1 ให้เปลี่ยนเป็น 0 และ break ขั้นตอนที่ 3 : หากเจอ 0 ให้เปลี่ยนเป็น 1 ขั้นตอนที่ 4 : พิมพ์อาร์เรย์

ตัวอย่าง

การนำไปใช้โปรแกรมของอัลกอริทึมข้างต้น −

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

ผลลัพธ์

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