题解 | #高精度整数加法#
高精度整数加法
https://www.nowcoder.com/practice/49e772ab08994a96980f9618892e55b6
import java.util.Scanner; import java.math.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 //思路123, 24567,在此基础上添加0,如000123,024567,然后字符进行相加,最后处理如果结果第一位为0删除,剩下的就是结果 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); StringBuilder retStr = new StringBuilder(); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNext()) { // 注意 while 处理多个 case String[] a = new String[2]; a[0] = in.next(); a[1] = in.next(); //补0,俩个字段长度少的补0 int n = a[0].length()-a[1].length(); //计算添0 if (n>0){ a[1] = addZero(a[1],Math.abs(n)); a[0] = "0"+a[0]; }else if(n<0){ a[0] = addZero(a[0],Math.abs(n)); a[1] = "0"+a[1]; }else{ a[0] = "0"+a[0]; a[1] = "0"+a[1]; } // System.out.println(a[1].length()); // retStr = addZero(retStr,a[0].length()-1); for(int m = 0;m<a[0].length();m++) retStr.append("0"); int i = a[0].length()-1; int j = 0; while(i>0){ int b = Integer.parseInt(a[0].substring(i,i+1)); int c = Integer.parseInt(a[1].substring(i,i+1)); int add = Integer.parseInt(retStr.substring(i,i+1)); //代表进位的数 int addno = (b+c+add)>=10?1:0; int rc = (b+c+add)%10; if (addno ==0) retStr.replace(i,i+1,""+rc); else{ retStr.replace(i,i+1,""+rc); retStr.replace(i-1,i,""+addno); } i--; } if (retStr.substring(0,1).equals("0")){ retStr.delete(0,1); } System.out.println(retStr); } } //字符前面添0 static String addZero(String zeroString,int n){ for(int i = 0; i<n+1;i++) zeroString ="0"+zeroString; return zeroString; } }