超大整数相加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;
 }

 

posted @ 2013-12-18 14:24  青木流水  阅读(714)  评论(0编辑  收藏  举报