标签:整数 hang push binary 运算 size 表示 pre leetcode
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1 和 0。
示例 1:
输入: a = "11", b = "1"
输出: "100"
示例 2:
输入: a = "1010", b = "1011"
输出: "10101"
提示:
每个字符串仅由字符 ‘0‘ 或 ‘1‘ 组成。
1 <= a.length, b.length <= 10^4
字符串如果不是 "0" ,就都不含前导零。
思路:
首先看到a,b的长度有可能到10000,不可能将其转换为真实的二进制数进行加法,所以必须用大整数运算了。
需要注意的就是进位的处理,以及在相加完之后,进位为1时,要把它放在最高位,其他的就没啥啦~
另(leetcode 的代码测试是真的好用!不用include各种包,后台都写好了,也不用管输入输出,很人性化~)
代码:
1 struct bign 2 { 3 int d[10010]; 4 int len; 5 bign() 6 { 7 memset(d,0,sizeof(d)); 8 len=0; 9 } 10 }; 11 bign change(string a) 12 { 13 bign b; 14 b.len=a.size(); 15 for(int i=0;i<b.len;++i) 16 { 17 b.d[i]=a[b.len-i-1]-‘0‘; 18 } 19 return b; 20 } 21 string add(bign a, bign b) 22 { 23 string c; 24 int carry=0; 25 for(int i=0;i<a.len||i<b.len;++i) 26 { 27 int temp=a.d[i]+b.d[i]+carry; 28 c.push_back(temp%2+‘0‘); 29 carry=temp/2; 30 } 31 if(carry!=0) 32 c.push_back(carry+‘0‘); 33 reverse(c.begin(),c.end()); 34 return c; 35 } 36 37 class Solution { 38 public: 39 string addBinary(string a, string b) { 40 bign c=change(a); 41 bign d=change(b); 42 return add(c,d); 43 } 44 };
标签:整数 hang push binary 运算 size 表示 pre leetcode
原文地址:https://www.cnblogs.com/meteorrain/p/14351661.html