大数相加(二进制)
发布时间:2020-12-14 02:54:02 所属栏目:大数据 来源:网络整理
导读:作为大三老狗,今天才开始在LeetCode上刷题,而且还是非常Easy的题,感觉自己特别渣,但是,我会一直努力下去的,争取一天一题。话不多说,看我今天做的题吧: Add Binary Given two binary strings,return their sum (also a binary string). For example,
作为大三老狗,今天才开始在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] = ' '; 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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |