题目要求输入的两个整数a和b不超过100位,整形或浮点型内数的数位肯定不到100位,所以得自己写。
因为两个n位数相加,结果可能是五位数,所以结果数组需提前预留出来一位用于计算。而在代码中,涉及到数组越界的情况,输入的数组也需要提前预留一位。(并且,预留一位也是合题意的。因为检测数据肯定是在100位以内的,所以数组设成101位,本题肯定能过。)
package basic;
import java.util.Scanner;
public class _29highPrecisionAddition {
public static void main(String[] args) {
int[] number1=new int[101];
int[] number2=new int[101];
int[] result=new int[101];
String input1;
String input2;
char[] inputChar1=new char[100];
char[] inputChar2=new char[100];
Scanner sc=new Scanner(System.in);
input1=sc.next();
input2=sc.next();
inputChar1=input1.toCharArray();
inputChar2=input2.toCharArray();
int j=0;
for(int i=input1.length()-1;i>=0;i--){
//number1[j++]=input1.charAt(i);
//number2[z++]=Integer.valueOf(inputChar2[i]);
//这两种方法运行结果都为数字的ASCII值。并不是数字本身
number1[j++]=Integer.valueOf(inputChar1[i])-48;
}
int z=0;
for(int i=input2.length()-1;i>=0;i--){
number2[z++]=Integer.valueOf(inputChar2[i])-48;
}
int jw = 0;
int max;
max=j>=z?j:z;
int h=inputChar2.length-1;
for(int i=0;i<=max;i++){
result[i]=(number1[i]+number2[i]+jw)%10;
jw=(number1[i]+number2[i]+jw)/10;
}
if(result[max]!=0){
System.out.print(result[max]);
}
for(int i=max-1;i>=0;i--){
System.out.print(result[i]);
}
}
}