package bignumber; import java.util.*; public class BigNumUtil { public static void main(String[] args){ String s1 = "1243243253"; String s2 = "12656432473"; System.out.println(subtraction(s1,s2)); } /** * 计算两个大数相乘的方法 * @param String s1 * @param String s2 * @return String */ public static String multiply(String s1,String s2){ int[] bignum1 = change(s1); int[] bignum2 = change(s2); int[] demp = new int[s1.length()+s2.length()-1]; for(int i=0;i<=bignum1.length-1;i++){ for(int j=0;j<=bignum2.length-1;j++){ demp[i+j] += bignum1[i]*bignum2[j]; } } for(int i=0;i<demp.length;i++){ int j = demp[i]; if(j>=10){ demp[i] = j%10; demp[i+1] += j/10; } } StringBuffer show = new StringBuffer(""); for(int i=demp.length-1;i>=0;i--){ show.append(demp[i]); } while(show.charAt(0) == '0'){ show.deleteCharAt(0); } return show.toString(); } /** * 计算两个大数相加的方法 * @param String s1 * @param String s2 * @return String */ public static String plus(String s1,String s2){ int[] bignum1 = change(s1); int[] bignum2 = change(s2); int maxLen = Math.max(s1.length(), s2.length()); boolean isMax; //判定s1是否为位数较大的那个 if(maxLen==s1.length()){ isMax = true; }else{ isMax = false; } int minLen = Math.min(s1.length(), s2.length()); int[] demp = new int[maxLen+1]; for(int i=0;i<=maxLen-1;i++){ if(i<minLen){ demp[i] += bignum1[i]+bignum2[i]; }else{ if(isMax){ demp[i] = bignum1[i]; }else{ demp[i] = bignum2[i]; } } } for(int i=0;i<demp.length;i++){ int j = demp[i]; if(j>=10){ demp[i] = j%10; demp[i+1] += j/10; } } StringBuffer show = new StringBuffer(""); for(int i=demp.length-1;i>=0;i--){ show.append(demp[i]); } while(show.charAt(0) == '0'){ show.deleteCharAt(0); } return show.toString(); } /** * 计算两个大数相减的方法 * @param String s1 * @param String s2 * @return String */ public static String subtraction(String s1,String s2){ int[] bignum1 = change(s1); int[] bignum2 = change(s2); int maxLen = Math.max(s1.length(), s2.length()); int minLen = Math.min(s1.length(), s2.length()); int[] demp = new int[maxLen]; boolean isPositive = true; //判定s1是否为较大的那个 if(maxLen==s1.length() && maxLen!=s2.length()){ isPositive = true; }else if(maxLen==s2.length() && maxLen != s1.length()){ isPositive = false; }else{ int i = maxLen-1; while(i>=0){ if(bignum1[i]>bignum2[i]){ isPositive = true;break; }else if(bignum1[i]<bignum2[i]){ isPositive = false;break; }else{ i--; continue; } } } StringBuffer show; if(isPositive){ //若结果数为负,计算结果前加'-'号 show = new StringBuffer(""); }else{ show = new StringBuffer("-"); } if(isPositive){ //使用递归,若结果为正,正常计算;若为负,掉转顺序计算 for(int i=0;i<=maxLen-1;i++){ if(i<minLen){ demp[i] += bignum1[i]-bignum2[i]; }else{ if(isPositive){ demp[i] = bignum1[i]; }else{ demp[i] = bignum2[i]; } } } for(int i=0;i<demp.length;i++){ int j = demp[i]; if(j<0){ demp[i] = j+10; demp[i+1] -= 1; } } for(int i=demp.length-1;i>=0;i--){ show.append(demp[i]); } while(show.charAt(0) == '0'){ show.deleteCharAt(0); } return show.toString(); }else{ return "-"+subtraction(s2,s1); } } /** * 将字符串反转,并转为int数组. * @param String s * @return int[] */ public static int[] change(String s){ int[] result = new int[s.length()]; for(int i=0;i<s.length();i++){ result[i] = s.charAt(s.length() - i - 1)-'0'; } return result; } } BigNumUtil.java 乘法:multiply(String s1,String s2) 加法:plus(String s1,String s2) 减法:subtraction(String s1,String s2)