[c++]用字符串实现二进制的加法

题目描述:

Given two binary strings, return their sum (also a binary string).

The input strings are both non-empty and contains only characters 1 or 0.

题目来源:leetcode


思路:

计算机二进制加法运算:

    计算机计算二进制加法是分三部,第一步为将两个加数转换为二进制数,计算两个加数不需要进位的和(利用异或运算 ^ ),得出的结果。第二部将两个加数进行与运算(&)。第三部利用与运算得到结果进行左移运算(<<)(同时为计算两个加数需要进位的和),得出结果。将或异运算的结果和左移运算的结果作为两个新的加数,重复此操作。直到当与运算的结果为0,则异或运算的结果则为两个加数的和所对应的二进制数。

来源:https://blog.csdn.net/gaoyubo_taili/article/details/79694729


注意事项:

  • 这是一个递归的算法
  • 结果要考虑全为0的情况
  • 除去前端多余的0,用erase函数
  • 刚开始就要把两字符串的长度匹配好

全部代码:

 1 string s_xor(string a,string b)
 2 {
 3     int size=a.size();
 4     string c(size,'0');
 5     for(int i=0;i<size;++i)
 6     {
 7         if(a[i]==b[i]) c[i]='0';
 8         else c[i]='1';
 9     }
10     return c;
11 }
12 string s_and(string a,string b)
13 {  
14     int size=a.size();
15     string c(size,'0');
16     for(int i=0;i<size;++i)
17     {
18         if(a[i]==b[i]&&a[i]=='1') c[i]='1';
19         else c[i]='0';
20     }
21     return c;
22 }
23 bool is_0(string a)
24 {
25 
26 for(int i=0;i<a.size();++i)
27 if(a[i]!='0') return false;
28 return true;
29 }
30 class Solution {
31 public:
32     string addBinary(string a, string b) {
33         int size=a.size()>=b.size()?a.size():b.size();
34         a=string (size-a.size(),'0')+a;
35         b=string (size-b.size(),'0')+b;
36         if(is_0(s_and(a,b)))  {
37     string c=s_xor(a,b);
38     int i=0;
39     if(is_0(c)) return "0";
40     while(c[i]=='0')
41     {
42         c.erase(c.begin()+i);
43     }
44     return c;
45     }
46         else {
47         return addBinary(s_and(a,b)+"0",s_xor(a,b));
48 
49         }
50     }
51 };

猜你喜欢

转载自www.cnblogs.com/cuphoria/p/9651501.html