สมมติว่าเรามีสตริงไบนารีสองตัว a และ b เราต้องบวกเลขฐานสองเหล่านี้และหาผลรวมของพวกมัน เช่นเดียวกับสตริง
ดังนั้น หากอินพุตเป็น a ="10110", b ="10010" เอาต์พุตจะเป็น "101000"
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ret :=สตริงว่าง
- นา :=ขนาดของ a, nb :=ขนาดของ b
- i :=na - 1, j :=nb - 1
- พกพา :=0
- ในขณะที่ (i>=0 หรือ j>=0) ให้ทำ:
- addA :=(ถ้า i>=0 แล้ว a[i] - ASCII ของ '0' มิฉะนั้น 0)
- addB :=(ถ้า j>=0 แล้ว b[j] - ASCII ของ '0' มิฉะนั้น 0)
- sum :=addA + addB + carry
- carry :=sum / 2
- sum :=sum mod 2
- ret :=ret concatenate sum
- (ลด i โดย 1)
- (ลดลง j ทีละ 1)
- ถ้าการพกพาไม่ใช่ศูนย์ ดังนั้น:
- ret :=ret concatenate carry
- ย้อนกลับอาร์เรย์ ret
- คืนสินค้า
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
#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