zoukankan      html  css  js  c++  java
  • 大整数加法

    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();
        }
    }
  • 相关阅读:
    Hibernate3 第一天
    Struts2第四天
    Struts2第二天
    Struts2第一天
    【剑指offer】数字在排序数组中出现的次数,C++实现
    【剑指offer】两个链表的第一个公共结点,C++实现
    【剑指offer】数组中的逆序对。C++实现
    [Python]定时任务框架 APScheduler
    [pandas] SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame
    alicode35-找出二叉搜索树的第2大的数
  • 原文地址:https://www.cnblogs.com/huangcongcong/p/4006701.html
Copyright © 2011-2022 走看看