大数之和
题目描述
以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。
(字符串长度不大于100000,保证字符串仅由’0’~'9’这10种字符组成)
算法思想:要求以字符串形式返回,直接相当于写一个加法的运算。
直接从末位开始相加,定义一个bit进位,两数相加之和大于十,将bit置为1,否则置为零。
代码:
string solve(string s, string t) {
// write code here
string str;
int len1 = s.size()-1,len2 = t.size()-1;
int bit = 0;
while(len1 >=0 && len2 >=0)
{
str.push_back((s[len1]-'0'+t[len2]-'0'+bit)%10+'0');//直接将末位两数相加以字符串形式放入str
if(s[len1]-'0'+t[len2]-'0'+bit>=10)bit = 1;
else
{
bit = 0;
}
len1--;
len2--;
}
while(len1>=0)//s若还有剩余
{
str.push_back((s[len1]-'0'+bit)%10+'0');//上一次相加的bit是否为1
if(s[len1]-'0'+bit>=100)bit =1;//为“999999”的情况
else
{
bit = 0;
}
len1--;
}
while(len2 >= 0)//若t中还有剩余
{
str.push_back((t[len2]-'0'+bit)%10+'0');
if(t[len2]-'0'+bit>=10)bit = 1;
else
{
bit = 0;
}
len2--;
}
if(bit == 1)str.push_back('1');//若两数相加大于十bit为1 再向前进1
reverse(str.begin(),str.end());
return str;
}