题目:输入两个大大数,计算其相加结果。
思路:用正则表达式判断输入合法性,大数相加采用数组逐位相加的方法,注意进位的处理。
package huaweiicomeagain;
import java.math.BigInteger;
/**
* 大数相加,关键注意处理进位问题
* @author huanghuankun
*
*/
public class BigNumAdd {
public static void main(String[]args){
String firstNum = "464946464645646482";
String secondNum = "554646464644632424246";
String regex = "^[1-9]{1,}[0-9]*$";
if(firstNum.matches(regex)&& secondNum.matches(regex)){
String result = bigNumAdd(firstNum,secondNum);
System.out.println("result1="+result);
BigInteger big1 = new BigInteger(firstNum);
BigInteger big2 = new BigInteger(secondNum);
BigInteger result2 = big1.add(big2);
System.out.println("result2="+String.valueOf(result2));
}else{
System.out.println("Wrong input.");
}
}
/**
* @param firstNum
* @param secondNum
* @return
*/
private static String bigNumAdd(String firstNum, String secondNum) {
// TODO Auto-generated method stub
int[] num1 = new int[firstNum.length()];
int[] num2 = new int[secondNum.length()];
int length = firstNum.length()>secondNum.length()?firstNum.length()+1:secondNum.length()+1;
int [] sum = new int[length];
for(int i=firstNum.length()-1;i>=0;i--){
num1[i] = Integer.parseInt(String.valueOf(firstNum.charAt(i)));
}
for(int i=secondNum.length()-1;i>=0;i--){
num2[i] = Integer.parseInt(String.valueOf(secondNum.charAt(i)));
}
int flag = 0;
int j = 0;
int length1 = num1.length-1;
int length2 = num2.length-1;
for(j=0;j<num1.length && j<num2.length;j++){
sum[j] = (num1[length1] + num2[length2]+flag)%10;
flag = (num1[length1--] + num2[length2--]+flag)/10;
}
if(j==num1.length&&j!=num2.length){
for(;j<num2.length;j++){
sum[j] = (num2[length2]+flag)%10;
flag = (num2[length2--]+flag)/10;
}
}else if(j==num2.length&&j!=num1.length){
for(;j<num1.length;j++){
sum[j] = (num1[length1]+flag)%10;
flag = (num1[length1--]+flag)/10;
}
}else{
sum[j] += flag;
}
String result ="";
for(int i=sum.length-1;i>=0;i--){
if(i==sum.length-1&&sum[i]==0){
result += "";
}else{
result += sum[i];
}
}
return result;
}
}