首页 > 代码库 > 大整数加法

大整数加法

java实现

package 经典;import java.math.BigInteger;import java.util.regex.Matcher;import java.util.regex.Pattern;public class BigIntegerAddition {    /**     * @param args     */    public static void main(String[] args) {        // TODO Auto-generated method stub                String x="12314123112313";        String y="10889129018390813908";        String z;                BigInteger a=new BigInteger(x);        BigInteger b=new BigInteger(y);        z=a.add(b).toString();                System.out.println(z);                System.out.println(add(x,y));    }            public static int[] toIntArray(String str){        int length=str.length();        int[] a=new int[length];                for(int i=0; i<length; i++)            a[i]=str.charAt(i)-‘0‘;            return a;        }            public static String add(String a,String b){        if(a==null||b==null)            return null;        if(!isNumeric(a)||!isNumeric(b))            return null;        if(a.equals("0"))            return b;        if(b.equals("0"))            return a;        if(a.length()==b.length())        {            return addHelp(a,b);        }        else if(a.length()>b.length())        {            String x=a;            String y=addZeroToFirst(b, a.length());            return addHelp(x,y);        }        else        {            String y=b;            String x=addZeroToFirst(a, b.length());            return addHelp(x,y);        }            }        public static String addHelp(String a,String b){                int length=a.length();        int[] x=toIntArray(a);        int[] y=toIntArray(b);            int[] z=new int[length+1];        int temp;        int diff=0;                for(int i=length; i>0; i--)        {            temp=x[i-1]+y[i-1]+diff;            z[i]=temp%10;            diff=temp/10;        }        z[0]=diff;                StringBuilder sb=new StringBuilder();        for(int i=1-diff; i<=length; i++)        {            sb.append(z[i]);        }                return sb.toString();    }        public static String addZeroToFirst(String str,int n){                StringBuilder sb=new StringBuilder();        int length=str.length();        int diff=n-length;        while(diff>0)        {            sb.append("0");            diff--;        }                sb.append(str);                return sb.toString();            }            public static boolean isNumeric(String str){        Pattern p=Pattern.compile("[0-9]*");        Matcher m=p.matcher(str);        return m.matches();    }}

 

大整数加法