大整数相加算法

不说了,直接上代码

package com.learning;

public class bigDecimal {
    public static void main(String[] args){
        System.out.println(bigNumberSum("4267097523189999999999" ,"9548125312989777665443"));
    }

    /**
     * 大整数相加,利用数组存储
     * 原理:利用竖式相加,对两个数进行反转,再按位相加,大于10进1,最终得到的结果再反转
     * @param num1
     * @param num2
     * @return
     */
    private static String bigNumberSum(String num1,String num2){
        //反转第一个数
        char[] charsA = new StringBuffer(num1).reverse().toString().toCharArray();
        //反转第二个数
        char[] charsB = new StringBuffer(num2).reverse().toString().toCharArray();

        //计算结果的长度为最长位数+1
        int maxLen = charsA.length > charsB.length ? charsA.length+1 : charsB.length+1;
        int result[] = new int[maxLen];
        /**
         * 算法核心
         */
        for (int i=0;i<result.length;i++){
            int temp = result[i];
            if(i<charsA.length){
                temp += charsA[i]-'0';
            }
            if(i<charsB.length){
                temp += charsB[i]-'0';
            }
            if(temp > 10){
                temp = temp-10;
                result[i+1]=1;
            }
            result[i]=temp;
        }

        /**
         * 结果反转
         */
        StringBuilder sb = new StringBuilder();
        for(int i = result.length-1;i > 0;i--){
            if(i==result.length-1 && result[i] == 0){
                continue;
            }
            sb.append(result[i]);
        }
        return sb.toString();
    }
}

 

posted @ 2018-11-19 14:49  月眸  阅读(365)  评论(0编辑  收藏  举报