题解 | #高精度整数加法#
高精度整数加法
https://www.nowcoder.com/practice/49e772ab08994a96980f9618892e55b6
两个值相加的值n超过10则需要加1
下次循环拿到sb排在最前面的字符串。如果拿不到就定义为0。拿到后先将最首位值直接删除(首位拿出来后需要计算,计算后直接作为结果存入)
首位拿到的值需要和n累加,累加后的值为m。
如果m>=10.则需要先存个位数值,并首位写成1.
m<10。直接存入
import java.util.Scanner; import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNext()) { // 注意 while 处理多个 case String a = in.nextLine(); String b = in.nextLine(); // 比较两个字符串之间的长度大小 int i=1; StringBuilder sb =new StringBuilder(); while (a.length()>=i || b.length()>=i) { // 从末尾开始计算 int c1 = i<=a.length()? Integer.parseInt(a.charAt(a.length()-i)+""):0; int c2 = i<=b.length()? Integer.parseInt(b.charAt(b.length()-i)+""):0; int m = c1+c2; // 定义排在首位值 int firstLetter = 0; // 只有当前面一次计算,两个数字相加超过大于=10的时候,才会数字进一,导致再次进入时i的长度和sb的长度相等 // 否则sb永远比i小1位 if (sb.length()==i) { firstLetter = Integer.parseInt(sb.charAt(i-1)+""); sb.replace(sb.length()-1,sb.length(),""); } m = firstLetter+m; if (m>=10) { m=m-10; // sb需要先把最大字符串删除,再append。 sb.append(m).append(1); } else { sb.append(m); } i++; } System.out.println(sb.reverse().toString()); } } }