有时候,遇见两数大于long相加的情况怎么算呢?此时我选用字符进行处理,废话不多说,直接上代码,代码注释很详细;
import java.util.Arrays;
/**
* @author kain.wang@embracesource.com
* @date 2018/12/3 14:19
*/
public class BigDataPlus {
public static String bigNumberSum (String a,String b){
//1.把两个大整数用数组逆序存储,数组长度等于较大整数位数+1
int maxLength=a.length()>b.length() ? a.length() : b.length();
//将数存入数组中
int[] arrayA=new int[maxLength+1];
for(int i=0;i<a.length();i++){
// -'0'的目的 : 将字符串转化成实际的整数 不然的话就是字符指的数字 比如'1' -> 49
//补位,剩下的为自动补位0
arrayA[i]=a.charAt(a.length()-1-i)-'0';
}
int[] arrayB=new int[maxLength+1];
for(int i=0;i<b.length();i++){
arrayB[i]=b.charAt(b.length()-1-i)-'0';
}
//2.构建result数组,数组长度等于较大整数位数+1
int[] result=new int[maxLength+1];
//3.遍历数组,按位相加
//保留result数组最高位为 0
for (int i=0;i<result.length-1;i++){
int temp =result[i];
temp+=arrayA[i];
temp+=arrayB[i];
//判断是否进位
if (temp>=10){
temp=temp-10;
result[i+1]=1;
}
result[i]=temp;
}
//4.把result数组再次逆序并转成String
StringBuffer sb= new StringBuffer();
//是否找到大整数的最高有效位
boolean findFirst=false;
for (int i=result.length-1;i>=0;i--){
if(!findFirst){
if (result[i]==0){
//遇见continue ,不需要执行下面代码
continue;
}
findFirst=true;
}
sb.append(result[i]);
}
//控制台打印出结果
System.out.println(Arrays.toString(arrayA));
System.out.println(Arrays.toString(arrayB));
System.out.println(Arrays.toString(result));
return sb.toString();
}
public static void main(String[] args) {
System.out.println(bigNumberSum("83","990"));
}
}