题解 | #大数加法#
大数加法
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进位应该在循环外面设置,因为最后全部加完了,还有一个进位。