Lintcode 408 解题思路及c++代码

408. 二进制求和

题目:

给定两个二进制字符串,返回他们的和(用二进制表示)。

样例
样例 1:
输入:
a = “0”, b = “0”
输出:
“0”

样例 2:
输入:
a = “11”, b = “1”
输出:
“100”

思路:

刚拿到手的时候,心想就是一个二进制而已,写一个二进制相加就行了,但是上手的时候坑就特别多了。
1.我踩的第一个坑:我心里想着是从个位相加,但是并没有代码却是分别都从下标为0开始相加,这是一个大坑;
2.第二个坑:两个字符串长度不等的时候怎么做呢?我一开始想到的是先算重叠部分,后面再相加,但是实现起来就很晕了。
3.第三个坑:这是基本功的问题,一开始int直接强制转化成char,用的是char(a),可是一直乱码;后面直接用char(a+‘0’);于是乎我是一直把强制转化想简单了,以为直接用就了,其实是利用ASCII做的转换。char(1)是把1转换为ASCII为1的字符;我一直一位是把1转化成1;
接下来讲讲大概的思路:
第一步:我们要把字符转化成数字,并且做一个二进制相加;
第二部:在转换成数字的时候需要注意一个点,字符串长短不一的时候如何处理。我的做法是用字符串的长度length-1做自减,如果等于0说明是最后一个,小于0则这个字符串已经结束,那么接下来的每次运算,直接给一个0,最后跳出循环的条件则是两个长度都为负。
第三部,最后快结束的时候还要看看最后的进位flag是否为1,为1的话还在最前面加个1。

最后附上代码:在这里插入代码片

string addBinary(string &a, string &b) {
        // write your code here
        int c,d,e,flag;
        string sum="";
        int i=a.size()-1,j=b.size()-1;
    	for(;i>=0||j>=0;i--,j--)	
    	{
    		if(i<0) c=0;
    		else 	c=a[i]-'0';
    		if(j<0) d=0;
			else	d=b[j]-'0';
			if(flag==1) 
			{
				e=c+d+1;
				flag=0;
			}
			else e=c+d;
			if(e>=2) 
			{
				sum=char((e-2)+'0')+sum;
				flag=1;
			}else	sum=char(e+'0')+sum;		
		}
	
		if(flag==1) sum='1'+sum;
		return sum;
    }
    ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值