大整数相加算法
不说了,直接上代码
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(); } }