力扣 题目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 }
View Code

 

posted @ 2022-06-05 13:04  无聊的阿库娅  阅读(24)  评论(0编辑  收藏  举报