ধরুন আমাদের দুটি বাইনারি স্ট্রিং a এবং b আছে, আমাদের এই বাইনারি সংখ্যাগুলি যোগ করতে হবে এবং একটি স্ট্রিং হিসাবে তাদের যোগফল খুঁজে বের করতে হবে।
সুতরাং, যদি ইনপুটটি a ="10110", b ="10010" এর মত হয়, তাহলে আউটপুট হবে "101000"।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- ret :=খালি স্ট্রিং
- na :=a এর আকার, nb :=b এর আকার
- i :=na - 1, j :=nb - 1
- বহন করুন :=0
- যখন (i>=0 বা j>=0), করবেন:
- addA :=(যদি i>=0 হয়, তাহলে a[i] - '0'-এর ASCII, অন্যথায় 0)
- addB :=(যদি j>=0 হয়, তাহলে b[j] - '0'-এর ASCII, অন্যথায় 0)
- সমষ্টি :=addA + addB + বহন
- বহন করুন :=যোগফল / 2
- সমষ্টি :=সমষ্টি মোড 2
- ret :=ret concatenate sum
- (i 1 কমিয়ে দিন)
- (j 1 দ্বারা কমিয়ে দিন)
- যদি বহন অ-শূন্য হয়, তাহলে:
- ret :=ret concatenate বহন
- অ্যারে রিভার্স করুন
- রিটার্ন রিটার্ন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
string solve(string a, string b){
string ret = "";
int na = a.size();
int nb = b.size();
int i = na - 1;
int j = nb - 1;
int carry = 0;
while(i >= 0 || j >= 0){
int addA = i >= 0 ? a[i] - '0' : 0;
int addB = j >= 0 ? b[j] - '0' : 0;
int sum = addA + addB + carry;
carry = sum / 2;
sum %= 2;
ret += to_string(sum);
i--;
j--;
}
if(carry)
ret += to_string(carry); reverse(ret.begin(), ret.end());
return ret;
}
};
main(){
string a = "10110", b = "10010"; Solution ob;
cout << ob.solve(a, b);
} ইনপুট
"10110","10010"
আউটপুট
101000