思路:先将字符串反转,用max()选出两个字符串中长的那个,短的补位0,从低位到高位计算,进位初始值0,计算时每次遍历结果为(进位+a[i] + b[i])%2,进位改为(进位+a[i] + b[i])/2,字符串全部遍历结束时如果进位不为0,将其添加到最高位。
ps:字符串反转用reverse(a.begin() , a.end() );
字符串末尾插入:a.push_back();
选大的数用max(int a,int b);
代码:
class Solution { public: string addBinary(string a, string b) { string ans; reverse(a.begin(),a.end()); reverse(b.begin(),b.end()); int n=max(a.size(),b.size()); int carry=0; for(int i=0;i<n;i++) { if(i<a.size()&&a[i]=='1') { carry+=1; } if(i<b.size()&&b[i]=='1') { carry+=1; } ans.push_back((carry%2)?'1':'0'); carry=carry/2; } if(carry) { ans.push_back('1'); } reverse(ans.begin(),ans.end()); return ans; } };
标签:end,string,二进制,int,数以,字符串,进位 From: https://www.cnblogs.com/sssyh/p/16767211.html