题解 | #高精度整数加法#
高精度整数加法
https://www.nowcoder.com/practice/49e772ab08994a96980f9618892e55b6
import java.util.Scanner;
// 注意类名必须为 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.next();
String b = in.next();
StringBuilder sba=new StringBuilder(a);
a=sba.reverse().toString(); //翻转,把个位数放在左侧,两个字符串只用一个下标,便于遍历
StringBuilder sbb=new StringBuilder(b);
b=sbb.reverse().toString();//翻转,把个位数放在左侧,两个字符串只用一个下标,便于遍历
int n1 = a.length();
int n2 = b.length();
int n=Math.min(n1,n2);
int ln=Math.max(n1,n2);
String longStr;
if(n1>n2){
longStr=a;
}else{
longStr=b;
}
StringBuilder sb=new StringBuilder();//创建一个sb,用于记录计算结果
int index=0; //遍历的位置下标
int val1=0; //每次从长字符串中取的数字
int val2=0; //每次从短字符串中取得数字
int val=0; //每次两数字相加的和
while(val>=10 || index<=n-1){
val1=0; //将上次的取值归零
val2=0;//将上次的取值归零
val/=10;//对上次的和取高位 数值为0或者1
if(index<=n1-1)val1=a.charAt(index)-'0';
if(index<=n2-1)val2=b.charAt(index)-'0';
val=val1+val2+val;
int temp=val%10; //当前这一位的数字
String strnow=Integer.toString(temp);
sb.append(strnow); //录入到sb中
index++;
}
String str1=index<=ln-1?longStr.substring(index):"";
//取出较长字符串中剩余的,注意index可能已经大于n-1了
sb.append(str1); //把长字符串中剩余的夹在右边,注意此时结果仍然是反着的
String des=sb.reverse().toString(); //转回来
System.out.print(des);
}
}
}
