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;
}
还有一个值得注意的问题是速度太慢了,大家如果有更好的想法,请不吝赐教,非常感谢。