大数加法:即运算的数据可能很大,int、long、long long无法存放,存在字符串中,但是加法的运算规则还是10进制。
对于两个字符串,首先判断两者的长度,我们将字符串s设置为较长的字符串,方便后面的运算(也可以将t设置为较长的)。
从低位开始逐字符取出转换为整数num1和num2,当较短的已经取完则置num2为0;然后进行加法运算(记得加上进位flag),运算过程中用flag表示是否存在进位,结果对10求整就是进位结果,对10取余得到当前位置的结果,赋值给s当前位置,直到运算完毕。
最后需要注意的是,最高位是否存在进位,即判断循环结束后的flag值,若是等于1,则产生进位,在运算结果字符串s前拼接一个1即可,最后返回s即为所求结果。
(PS:对于其他进制的运算方法一样,只需要将标志位的计算方式变一下就行,比如8进制,则对8进行求整得到进位结果,取余就是当前位置的结果。)
class Solution {public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可* 计算两个数之和* @param s string字符串 表示第一个整数* @param t string字符串 表示第二个整数* @return string字符串*/string solve(string s, string t) {// write code hereif(s.size()<t.size()){string temp=s;s=t;t=temp;}int len1=s.size();int len2=t.size();int num1,num2,flag=0,sum;while(len1>0){num1=s[len1-1]-'0';if(len2>0)num2=t[len2-1]-'0';elsenum2=0;sum=num1+num2+flag;s[len1-1]=sum%10+'0';flag=sum/10;len1--;len2--;}if(flag==1)s="1"+s;return s;}};