作为大三老狗,今天才开始在LeetCode上刷题,而且还是非常Easy的题,感觉自己特别渣,但是,我会一直努力下去的,争取一天一题。话不多说,看我今天做的题吧:
Add Binary
Given two binary strings, return their sum (also a binary string).
For example,
a = "111";
b = "100";
return "1011"
下面是我的代码:
#include <iostream>
#include <string>
using namespace std;
const int MAXSIZE = 1001;
string AddBinary(string a,string b);
int main()
{
string a = "0";
string b = "0";
string c;
c=AddBinary(a,b);
cout<<c<<endl;
return 0;
}
string AddBinary(string a,string b)
{
char s[MAXSIZE];
char d[MAXSIZE];
string c;
int lena = a.size();
int lenb = b.size();
int len_max = lena > lenb ? lena : lenb;//取两者的较大值赋给len_max
len_max++;//以防有进位
s[0] = '\0';
for(int i=1;i<=len_max;i++)
s[i]='0';//将s的前len_max位初始化
for(int i=1;i<=lena;i++)
s[i]+=a[lena-i]-'0';//将string a的值反向与s[]相加,在此之前s[]的前len_max位都是0
for(int i=1;i<=lenb;i++)
s[i]+=b[lenb-i]-'0';//将string b的值反向与s[]相加,在此之前s[]的值与string a的值顺序相反
for(int i=1;i<len_max;i++)
{
if(s[i]>'1')//判断进位
{
s[i]-=2;//PS:如果是十进制则:s[i]-=10;
s[i+1]++;
}
}
for(int i=len_max;i>0;i--)//去掉前导0
{
if(s[i] == '0')
{
len_max--;
if(len_max == 0)//判断特殊情况,两个数相加最小也应该是0,长度为1。
{
len_max=1;
s[1]='0';
break;
}
}
else
break;
}
for(int i=0;i<=len_max;i++)//将s[]的值反向赋给d[].
d[i]=s[len_max-i];
c=d;//因为返回值为string
return c;
}