บวกเลขไบนารีที่เก็บเป็นสตริง คืนผลลัพธ์เป็นสตริงไบนารี (ไม่แปลงเป็น int)
ตัวอย่าง: "10110" + "10010" = "101000"
อัลกอริธึม
- เดินจากขวาไปซ้าย (LSB ไป MSB)
- บวกบิตแต่ละตำแหน่ง + carry
- ผลบิต = sum % 2, carry = sum // 2
- สุดท้ายถ้า carry=1 ให้เพิ่มด้านหน้า แล้ว reverse ผลลัพธ์
โค้ด C++
#includeusing namespace std; class Solution { public: string solve(string a, string b) { string ret = ""; int na = a.size(), nb = b.size(); int i = na - 1, j = nb - 1, 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; } }; int main() { string a = "10110", b = "10010"; Solution ob; cout << ob.solve(a, b); // 101000 }