इस समस्या में, हमें एक संख्या का द्विआधारी प्रतिनिधित्व दिया जाता है और हमें पिछली संख्या का द्विआधारी प्रतिनिधित्व यानी वह संख्या ढूंढनी होती है जो दी गई संख्या में से एक को घटाने पर प्राप्त होती है।
द्विआधारी प्रतिनिधित्व संख्या का आधार संख्या के आधार को आधार 2 में बदल रहा है और केवल 0 या 1 का उपयोग करके संख्या का प्रतिनिधित्व कर रहा है।
उदाहरण के लिए, 23 का बाइनरी प्रतिनिधित्व 10111 है।
तो, यहाँ हमें एक संख्या दी जाएगी, मान लीजिए n बाइनरी रूप में है। और हमें n-1 का द्विआधारी प्रतिनिधित्व खोजना होगा।
इस समस्या को हल करने के लिए, हमें बाइनरी घटाव की मूल बातें जानने की जरूरत है। आइए देखें कि क्या होता है जब 1 को 0 से घटाया जाता है या 1 बाइनरी रूप में। 0 - 1 =1 + 1 अगले बिट से ले जाता है। 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 तक फ्लिप करेंगे, जब तक कि 1 सामने न आ जाए। जब 1 का सामना करना पड़ता है, तो हम 1 से 0 तक फ़्लिप करेंगे और अंतिम परिणाम लौटाएंगे।
एल्गोरिदम
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.
उदाहरण
उपरोक्त एल्गोरिथम का कार्यक्रम कार्यान्वयन -
#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