LeetCode 67 题目解答:大数相加二进制版。先把两个数从最小位开始相加,最后把较长那个数与 carry 相加,直到结束。
AC 代码
- class Solution {
- public: string addBinary(string a, string b) {
- string ans;
- int carry = 0;
- int ai = a.size() - 1,
- bi = b.size() - 1;
- for (; ai >= 0 && bi >= 0; --ai, --bi) {
- int sum = (a[ai] - '0') + (b[bi] - '0') + carry;
- ans.push_back(sum % 2 + '0');
- carry = sum / 2;
- }
- string longStr = ai < 0 ? b: a;
- int startIdx = ai < 0 ? bi: ai;
- for (; startIdx >= 0; --startIdx) {
- int sum = (longStr[startIdx] - '0') + carry;
- ans.push_back(sum % 2 + '0');
- carry = sum / 2;
- }
- if (carry != 0) ans.push_back(carry + '0');
- reverse(ans.begin(), ans.end());
- return ans;
- }
- };
就爱阅读 www.92to.com 网友整理上传, 为您提供最全的知识大全, 期待您的分享,转载请注明出处。
来源: http://www.92to.com/bangong/2017/04-10/20241038.html