加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大数相加算法

发布时间: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;
	}
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读