大整數相加演算法
阿新 • • 發佈:2018-11-19
不說了,直接上程式碼
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(); } }