题解 | #大数加法#
大数加法
https://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
public String solve (String s, String t) {
// write code here
//模拟二进制加法,这是十进制,注意进位
//然后从两个输入拿数据的时候,是倒着取,其实有点像双指针里面的那个合并两个有序数组
int i = s.length()-1;
int j = t.length()-1;
int carry = 0;
StringBuilder sb = new StringBuilder();
while(i >= 0 || j >= 0){
int number1 = i>=0 ? s.charAt(i)- '0' : 0;
int number2 = j>=0 ? t.charAt(j)- '0' : 0;
int sum = number1 + number2 + carry;
carry = sum / 10;
sb.append(sum%10);
i--;
j--;
}
if(carry == 1 ){
sb.append(carry);
}
return sb.reverse().toString();
}
}
关键点,while循环里面,判断i和j用的是或,如果由其他的超出了,就置为0。并且,carry进位应该在循环外面设置,因为最后全部加完了,还有一个进位。
