题解 | #大数加法#
大数加法
https://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475
1.解题思路:第一步:接收的两个string要想进行加法运算,必须先将其转为int类型。第二步:转为int类型后,s和t从个位开始两两相加,具体原理幼儿园学过,如下图。定义一个StringBuffer,将余位存入StringBuffer中,进位暂存用于下一次运算。如此循环。第三步:最终得出StringBuffer,将最终的进位补上,但是此时的StringBuffer是倒序的,使用函数reverse变为正常的数字顺序,return即可。
2.代码实现:
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
public String solve (String s, String t) {
//存放相加的结果
StringBuffer stringBuffer = new StringBuffer();
int slength = s.length() - 1;
int tlength = t.length() - 1;
//如果其中一个没有值,则和为另外一个值
if (slength == -1)
return t;
if (tlength == -1)
return s;
//进位和余位
int jinWei = 0;
int yvWei = 0;
//开始循环,循环结束条件为s,t都循环完,防止出现如:s比t长,t循环完了,s还没循环完。
while (slength >= 0 || tlength >= 0) {
//将s分割,(s.charAt(slength) - '0')将string转为整型。
int snum = slength >= 0 ? (s.charAt(slength) - '0') : 0;
int tnum = tlength >= 0 ? (t.charAt(tlength) - '0') : 0;
//将分割的数字进行运算,余位取余,进位取整。
//需要先算余位,先前犯过这个错,先算进位将进位的上一次循环的值更新掉了,导致后算余位时出错
yvWei = (snum + tnum + jinWei) % 10;
jinWei = (snum + tnum + jinWei) / 10;
//运算结果放入stringBuffer
stringBuffer.append(yvWei);
slength --;
tlength --;
}
//循环运算结束,将进位补上
if(jinWei != 0)
stringBuffer.append(jinWei);
//stringBuffer是反的,使用reverse函数反转
//如99+99,上面循环结束后stringBuffer内容为891,反转即为198
stringBuffer.reverse();
return stringBuffer.toString();
}
}
#大数加法#