力扣 题目67- 二进制求和
题目
题解
仔细想想其实这题和力扣 题目66- 加一很类似 其中的加法运算我们就可以参考 66题的记录进位的方法
但66题是+1而这题是相加 这就表面了两个数的长度可能不同 那么我们可以把短的那个前面加入0 再进行运算
至于如何将先算出来的结果后放入 这就要考虑到递归算法 在我们算出来第一位时 便回溯
代码
1 #include<iostream> 2 #include<string> 3 using namespace std; 4 //从后往前? 5 int Binary(string &a, string &b, string &c,int site,int asize,int bsize,int carry) { 6 //如果两个都超过了长度 7 if (asize-site<0&& bsize-site < 0) { 8 //如果有进位 9 if (carry > 0) { 10 c.insert(0, "1"); 11 } 12 return 0; 13 } 14 //短的补0 15 if (asize - site < 0) { 16 a.insert(0, "0"); 17 asize += 1; 18 } 19 if (bsize - site < 0) { 20 b.insert(0,"0"); 21 bsize += 1; 22 } 23 //计算当前位置 24 int num = (a[asize - site] - 48) + (b[bsize - site] - 48)+ carry; 25 carry = num / 2; 26 Binary(a,b,c,site+1, asize, bsize, carry); 27 c += to_string(num % 2); 28 return 0; 29 } 30 31 class Solution { 32 public: 33 string addBinary(string a, string b) { 34 string c; 35 Binary(a,b,c,0,a.length()-1, b.length()-1,0); 36 return c; 37 } 38 }; 39 40 int main() { 41 Solution sol; 42 string a = "101"; 43 string b = "1011"; 44 string result=sol.addBinary(a,b); 45 cout << result << endl; 46 }