超大整数相加java算法
package com.test; import java.sql.Timestamp; import java.text.ParseException; public class BigMathAdd { public static void main(String[] args) throws ParseException{ String addA="999999999999999999999999999999999999999999999"; String addB="9"; System.out.println(new Timestamp(System.currentTimeMillis())); System.out.println(addA+"+"+addB+"="+strvalue(addA,addB)); System.out.println(9999+99); System.out.println(new Timestamp(System.currentTimeMillis())); } public static String strvalue(String addA,String addB){ String strvalue=""; int lenA=addA.length(); int lenB=addB.length(); int templen=0; //调整长度相同 if(lenA>=lenB){ templen=lenA-lenB; addB=maxlen(addB,templen); }else{ templen=lenB-lenA; addA=maxlen(addA,templen); } char addcharA[]=addA.toCharArray(); char addcharB[]=addB.toCharArray(); int len=addcharA.length; int valueC[]=new int[len]; for(int i=0;i<len;i++){ int a=Integer.parseInt(String.valueOf(addcharA[i])); int b=Integer.parseInt(String.valueOf(addcharB[i])); valueC[i]=a+b; } //每项相加存储 int tmp=0; //处理进位 for(int i=valueC.length-1;i>=0;i--){ if(valueC[i]+tmp>=10){ strvalue=String.valueOf(valueC[i]+tmp-10)+strvalue; tmp=(valueC[i]+tmp)/10; }else{ strvalue=String.valueOf(valueC[i]+tmp)+strvalue; tmp=0; } } if(tmp!=0){ strvalue = String.valueOf(tmp)+strvalue; } if(strvalue.charAt(0)=='0'){
strvalue = MatchParen(strvalue); //去掉前面的0
}
return strvalue; } //调整长度,使其长度一样 private static String maxlen(String str,int templen){ String strmax=null; StringBuffer buff=new StringBuffer(); for(int i=0;i<templen;i++){ buff.append("0"); } strmax=buff.toString()+str; return strmax; } }
private static String MatchParen(String s){
Pattern patthern = Pattern.compile("^0*");
Matcher match = patthern.matcher(s);
System.out.println(match.find());
s = match.replaceAll("");
return s;
}