题目描述
以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。
(字符串长度不大于100000,保证字符串仅由'0'~'9'这10种字符组成)
示例1
输入
复制
"1","99"
返回值
复制
"100"
说明
1+99=100
C++解答:
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
string solve(string s, string t) {
// write code here
if(t.size()==0)
return s;
else if(s.size()==0)
return t;
else{
string sum="";
string str1=s;
string str2=t;
reverse(str1.begin(),str1.end());
reverse(str2.begin(),str2.end());
int sh=0,jinwei=0;
int Len1=s.size();
int Len2=t.size();
sh=(str1[0]-'0'+str2[0]-'0')%10;
sum+=(char)(sh+'0');
jinwei=(str1[0]-'0'+str2[0]-'0')/10;
for(int i=1;i<Len1 && i<Len2;i++)
{
sh=(str1[i]-'0'+str2[i]-'0'+jinwei)%10;
sum+=(char)(sh+'0');
jinwei=(str1[i]-'0'+str2[i]-'0'+jinwei)/10;
}
if(Len1>Len2)
{
for(int i=Len2;i<Len1;i++)
{
sh=(str1[i]-'0'+jinwei)%10;
sum+=(char)(sh+'0');
jinwei=(str1[i]+jinwei-'0')/10;
}
}
else
{
for(int i=Len1;i<Len2;i++)
{
sh=(str2[i]-'0'+jinwei)%10;
sum+=(char)(sh+'0');
jinwei=(str2[i]-'0'+jinwei)/10;
}
}
if(jinwei==1)
sum+='1';
reverse(sum.begin(),sum.end());
return sum;
}
}
};
其实大数加法同类型的还有很大的数字加法 ,帖子很多啦。本代码完全手写,不参考任何资料。