এই সমস্যায়, আমাদের একটি সংখ্যার বাইনারি উপস্থাপনা দেওয়া হয়েছে এবং আমাদের পূর্ববর্তী সংখ্যার বাইনারি প্রতিনিধিত্ব খুঁজে বের করতে হবে অর্থাৎ প্রদত্ত সংখ্যা থেকে একটি বিয়োগ করার পর যে সংখ্যাটি পাওয়া যায়।
বাইনারী উপস্থাপনা একটি সংখ্যার সংখ্যাটি সংখ্যাটির ভিত্তিকে ভিত্তি 2 এ পরিবর্তন করছে এবং শুধুমাত্র 0 বা 1 ব্যবহার করে সংখ্যাটিকে উপস্থাপন করছে।
উদাহরণস্বরূপ, 23-এর বাইনারি উপস্থাপনা হল 10111।
সুতরাং, এখানে আমাদের একটি সংখ্যা দেওয়া হবে, ধরা যাক বাইনারি আকারে n। এবং আমাদের n-1 এর বাইনারি উপস্থাপনা খুঁজে বের করতে হবে।
এই সমস্যা সমাধানের জন্য, আমাদের বাইনারি বিয়োগের মূল বিষয়গুলি জানতে হবে। দেখা যাক বাইনারি আকারে 0 বা 1 থেকে 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