大数相加(二进制)

作为大三老狗,今天才开始在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;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值