題目描述:
Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
.
用兩個string表示大數,返回他們的和(也用string)
思路:
1.不用想,這道題用string肯定是有坑的,很有可能輸入的string很長,遠遠超過了long long的範圍,將string轉換成long long再返回去肯定不行。
2.仿照加法器,這一位p由三部分構成:A[i],B[i],以及上一位的進位,三個加起來了後,p%2就是這一位的值,p/=2得到下一位的進位。由此往復
代碼:
class Solution {
public:
string reverse(string a)
{
string s=a;
int lo=0,hi=s.size()-1;
while(lo<hi)
{
char temp = s[lo];
s[lo]=s[hi];
s[hi]=temp;
lo++;hi--;
}
return s;
}
string addBinary(string a, string b)
{
string ans="";
int p = 0, i = a.size() - 1, j = b.size() - 1;
while(i >= 0 || j >= 0 || p == 1)
{
p += i >= 0 ? a[i --] - '0' : 0;
p += j >= 0 ? b[j --] - '0' : 0;
ans += char(p % 2 + '0');
p /= 2;
}
return reverse(ans);
}
};