Lintcode 655解题思路和c++代码

655. 大整数加法

题目:
以字符串的形式给出两个非负整数 num1 和 num2,返回 num1 和 num2 的和。

样例
样例 1:
输入 : num1 = “123”, num2 = “45”
输出 : “168”

注意事项
num1 和 num2 的长度都小于5100。
num1 和 num2 都只包含数字 0-9。
num1 和 num2 都不包含任何前导零。
您不能使用任何内置的BigInteger库内的方法或直接将输入转换为整数。

解题思路:
1.把字符转化成个位数字相加,顺序从右到左,其中需要注意的点是字符不等的情况。
2.字符串长度不等的情况下,需要字符串的字符是否已经用完,用完就置0即可;
3.进位问题需要注意,比如说进位后flag要归0,尤其在循环结束后也要注意是否有进位,否则可能会出现999+1=000的情况。

附上代码:

 string addStrings(string &num1, string &num2) {
        // write your code here
    string sum="";
    int  a,b,flag=0,e;
    int i=num1.size()-1,j=num2.size()-1;
	for(;i>=0||j>=0;i--,j--)
	{
		
		if(i<0) a=0;
		else a=num1[i]-'0';
		if(j<0) b=0;
		else b=num2[j]-'0';
		if(flag==0)	e=a+b;
		else if(flag==1) 
		{
			e=a+b+1;
			flag=0;
		}
		if(e>=10) 
		{
			e=e-10;
			flag=1;	
		}
		sum=char(e+'0')+sum;
	}    
    if(flag==1) sum='1'+sum;
    return sum;
 }

还有一个值得注意的问题是速度太慢了,大家如果有更好的想法,请不吝赐教,非常感谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值