大数加法:即运算的数据可能很大,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 here
-
if(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';
-
else
-
num2=
0;
-
sum=num1+num2+flag;
-
s[len1
-1]=sum%
10+
'0';
-
flag=sum/
10;
-
len1--;
-
len2--;
-
}
-
if(flag==
1)
-
s=
"1"+s;
-
return s;
-
}
-
};
转载:https://blog.csdn.net/ldm_666/article/details/116609610
查看评论