ধরুন আমাদের দুটি বাইনারি স্ট্রিং 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