题解 | #高精度整数加法#
高精度整数加法
https://www.nowcoder.com/practice/49e772ab08994a96980f9618892e55b6
这道题看似简单需要注意的点特别多
1、当计算完成结果之后,如何处理结果输出?
结果输出有多重情况,通过测试用例发现很多需要注意的点总结如下
1、如果长字符串多余部分很长连 Long,Integer都放不下,需要考虑BigInt这个类型
2、计算完的结果有无进位需要单独考虑
计算结果需要倒置的哈,这一点儿非常关键
时间复杂度,空间复杂度O(n)
import java.math.BigInteger; import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String str1 = in.nextLine(); String str2 = in.nextLine(); //倒序求 int addOpera = 0; if (str1.length() > str2.length()) { String temp = str1; str1 = str2; str2 = temp; } System.out.println(findResult(str1, str2)); } private static String findResult(String str1, String str2) { StringBuffer result = new StringBuffer(); int diff = str2.length() - str1.length(); boolean hasJw = false; for (int i = str1.length() - 1; i >= 0; i--) { int a = Character.digit(str1.charAt(i), 10); int b = Character.digit(str2.charAt(diff + i), 10); int temp = a + b; if (hasJw) { temp++; } if (temp >= 10) { hasJw = true; } else { hasJw = false; } result.append(temp % 10); } String str3 = str2.substring(0, str2.length() - str1.length()); if (str3.length() > 0) { BigInteger int3 = new BigInteger(str3); if (hasJw) { int3= int3.add(new BigInteger("1")); } result.reverse(); return String.valueOf(int3) + result.toString(); }else{ result.reverse(); if(hasJw){ return "1"+result.toString(); }else{ return result.toString(); } } } }