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

2021-06-27 14:05

阅读:332

标签:size   article   http   题目   turn   c++   进制   span   blog   

题目描述:

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


思路:

计算机二进制加法运算:

    计算机计算二进制加法是分三部,第一步为将两个加数转换为二进制数,计算两个加数不需要进位的和(利用异或运算 ^ ),得出的结果。第二部将两个加数进行与运算(&)。第三部利用与运算得到结果进行左移运算(

来源: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;ii)
 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;ii)
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;ii)
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 };

 

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

标签:size   article   http   题目   turn   c++   进制   span   blog   

原文地址:https://www.cnblogs.com/cuphoria/p/9651501.html


评论


亲,登录后才可以留言!