思路:
第一步:把字符串一个一个切割好放进数组中
第二步:创建一个数组长度存放加和好的数据
第三步:找到最小的数的长度判断相加次数
第四步:逐位相加
第五步:将未相加的数放到all数组前边
第六步:判断r是否还有值,若有,放到最前边
第七步:判断最前边是不是0,如果是的话就去掉
第八步:倒序输出
代码:
import java.util.Arrays;
import java.util.Scanner;
public class precision {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String stra =sc.nextLine();
String strb = sc.nextLine();
int[] a = new int[stra.length()];
int[] b = new int[strb.length()];
//第一步:把字符串一个一个切割好放进数组中
for (int i=0;i<stra.length();i++){
//0的Ascll值是48
a[a.length-1-i]=stra.charAt(i)-48;
}
for (int i=0;i<strb.length();i++){
b[b.length-1-i]=strb.charAt(i)-48;
}
//第二步:创建一个数组长度存放加和好的数据
int maxLength = stra.length()> strb.length() ? stra.length() : strb.length();
//+1是为了怕两数相加超过最大的数的位数
int[] all = new int[maxLength+1];
//第三步:找到最小的数的长度判断相加次数
int minLength = stra.length() < strb.length() ? stra.length() : strb.length();
int r=0;
//第四步:逐位相加
for (int i=0;i<minLength;i++){
int c = a[i]+b[i]+r;
r = c/10;
all[i]=c%10;
}
//第五步:将未相加的数放到all数组前边
if(a.length>b.length){//如果a的位数比b多,则把a的数字放进c里面去
for(int i=b.length;i<maxLength;i++){//从b.length开始操作
int temp=a[i]+r;
r=temp/10;
all[i]=temp%10;
}
}else if(a.length<b.length){
for(int i=a.length;i<maxLength;i++){//从b.length开始操作
int temp=b[i]+r;
r=temp/10;
all[i]=temp%10;
}
}
//第六步:判断r是否还有值,若有,放到最前边
if(r!=0){
all[all.length-1]+=r;
}
//第七步:判断最前边是不是0,如果是的话就去掉
if(all[all.length-1] == 0){
//使用Arrays的静态方法copyOfRange(int[] original, int from, int to)。
all = Arrays.copyOfRange(all,0,all.length-1);
}
//第八步:倒序输出
for (int i=0;i<all.length;i++){
System.out.print(all[all.length-1-i]);
}
}
}