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; } } };