题解 | #大数加法 java#
大数加法
http://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475
相同的方法类似于链表的两数相加
- 从后往前加,如果,没有越界,那就取当前的字符值,如果或者已经结束了,那就相当于加0
- 对最后的数进行处理,返回的是直到前面出现不为0的字符下标到最后的长度子串
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
public String solve (String s, String t) {
// write code here
StringBuilder sb = new StringBuilder();
int n1 = s.length();
int n2 = t.length();
if (n1 == 0) {
return t;
} else if (n2 == 0) {
return s;
}
int i = n1 - 1;
int j = n2 - 1;
int carry = 0;
int len = Math.max(n1 , n2);
while (len >= 0) {
int num1 = i >= 0 ? s.charAt(i) - '0' : 0;
int num2 = j >= 0 ? t.charAt(j) - '0' : 0;
int sum = carry + num1 + num2;
sb.append(sum % 10);
carry = sum / 10;
len--;
i--;
j--;
}
if (carry > 0) {
sb.append(carry % 10);
}
String res = sb.reverse().toString();
int k = 0;
while (res.charAt(k) == '0') {
if (k == res.length() - 1) {
return "0";
}
k++;
}
return res.substring(k, res.length());
}
}