class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
string solve(string s, string t) {
// write code here
//其实本题就是一个大整数求和问题,不过和数据结构书上的区别在于本题不能额外开辟数组空间,难点就在于此。
int flag=0,ans=0;string temp;
int slenth=s.size();//分别求出两个字符串的大小,然后把每次相加结果覆盖长度较大的那个字符串,最后返回长度大的字符串即可
int tlenth=t.size();
int i,j;
for(i=slenth-1,j=tlenth-1;i>=0&&j>=0;i--,j--)
{
int data=((s[i]-'0')+(t[j]-'0')+flag)%10;
flag=((s[i]-'0')+(t[j]-'0')+flag)/10;
if(slenth>=tlenth)//即把每次相加结果覆盖长度大的字符串。why?:这样就不用额外开辟数组记录相加结果了
s[i]=data+'0';
else
t[j]=data+'0';
}
while(i>=0)
{
int data=(s[i]-'0'+flag)%10;
flag=(s[i]-'0'+flag)/10;
s[i]=data+'0';
i--;
}
while(j>=0)
{
int data=(t[j]-'0'+flag)%10;
flag=(t[j]-'0'+flag)/10;
t[j]=data+'0';
j--;
}
if(slenth>=tlenth)
{
if(flag==1)//注意:如果最后进位还是1的话说明最前面还要加个1但是此时原有字符串已经到0了,所以用temp返回。
{
temp="1";
temp+=s;
return temp;
}
else
return s;
}
else
{
if(flag==1)
{
temp="1";
temp+=t;
return temp;
}
else return t;
}
}
};