1. 程式人生 > >大整數相加演算法

大整數相加演算法

不說了,直接上程式碼

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(); } }