大数相加算法
发布时间:2020-12-14 03:39:59 所属栏目:大数据 来源:网络整理
导读:题目:输入两个大大数,计算其相加结果。 思路:用正则表达式判断输入合法性,大数相加采用数组逐位相加的方法,注意进位的处理。 package huaweiicomeagain;import java.math.BigInteger;/** * 大数相加,关键注意处理进位问题 * @author huanghuankun * */
题目:输入两个大大数,计算其相加结果。 思路:用正则表达式判断输入合法性,大数相加采用数组逐位相加的方法,注意进位的处理。 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; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |