假定两个字符串的长度一样,都是0-9字符组成,计算,它们的和。要求:从最高位到最低位进行加法运算。
import java.math.*;
import java.util.*;
public class Main{
public static void main(String[] args) {
String a="4861234865";
String b="8766984131";
add(a,b);//准确结果
addFromHigh(a,b,true);//从最高位到最低位执行加法
}
public static void add(String a,String b){
BigInteger n1=new BigInteger(a);
BigInteger n2=new BigInteger(b);
System.out.println(n1.add(n2));
}
/*
first=false,舍弃最左侧的进位;
first=true,保留最左侧的进位
*/
public static void addFromHigh(String a,String b,boolean first){
int n=a.length();
int i=-1;
int num=0;
while(i<n){
int j=i+1;
for(;j<n;j++){
int num1=a.charAt(j)-'0'+b.charAt(j)-'0';
if(num1==9){
continue;
}else if(num1<9){
if(!first){
first=true;
}else {
System.out.print(num);
}
for(int k=i+1;k<j;k++){
System.out.print(9);
}
i=j;
num=num1;
break;
}else{
if(!first){
first=true;
}else {
System.out.print(num+1);
}
for(int k=i+1;k<j;k++){
System.out.print(0);
}
i=j;
num=num1-10;
break;
}
}
if(j==n){
System.out.print(num);
for(int k=i+1;k<j;k++){
System.out.print(9);
}
i=j;
}
}
}
}