大整数相加(用String实现)

2019-08-17  本文已影响0人  天涯的尽头s风沙
package test;
public class BigNumAdd {
    public static void main(String[] args) {
        System.out.println(add("45", "14"));
        System.out.println(add("-8435753544364", "-7786843754117"));
        System.out.println(add("8435753544364", "-7786843754117"));
        System.out.println(add("-84", "84"));
        System.out.println(add("845", "-845"));
        System.out.println(add("14", "-15"));
        System.out.println(add("334", "-15"));
    }
    
    public static String add(String a,String b) {
        String m = "";
        //a,b都为正数
        if(a.charAt(0)!='-'&&b.charAt(0)!='-') {
            while(a.length()<b.length()) {
                a="0"+a;
            }
            while(a.length()>b.length()) {
                b="0"+b;
            }
            char[] charA = a.toCharArray();
            char[] charB = b.toCharArray();
            int len = charA.length;
            int[] charSum = new int[len+1];
            int flag = 0;
            for(int i=len-1;i>=0;i--) {
                charSum[i+1] = (charA[i]-'0'+charB[i]-'0'+flag)%10;
                flag = (charA[i]-'0'+charB[i]-'0'+flag)/10;
            }
            charSum[0]=flag;            
            for(int i=0;i<charSum.length;i++) {
                if(i==0&&charSum[i]==0)
                    continue;               
                m = m+charSum[i];
            }           
        }
        
        //a,b都为负数
        else if (a.charAt(0)=='-'&&b.charAt(0)=='-') {
            a = a.substring(1);
            b = b.substring(1);
            while(a.length()<b.length()) {
                a="0"+a;
            }
            while(a.length()>b.length()) {
                b="0"+b;
            }
            char[] charA = a.toCharArray();
            char[] charB = b.toCharArray();
            int len = charA.length;
            int[] charSum = new int[len+1];
            int flag = 0;
            for(int i=len-1;i>=0;i--) {
                charSum[i+1] = (charA[i]-'0'+charB[i]-'0'+flag)%10;
                flag = (charA[i]-'0'+charB[i]-'0'+flag)/10;
            }
            charSum[0]=flag;            
            for(int i=0;i<charSum.length;i++) {
                if(i==0&&charSum[i]==0)
                    continue;               
                m = m+charSum[i];
            }   
            m = "-"+m;
        }
        
        //a,b一正一负
        else {
            String pNum="",nNum="",bNum="",sNum= "";
            if(a.charAt(0)=='-'&&b.charAt(0)!='-') {
                pNum = b;
                nNum = a.substring(1);
            }
            if(a.charAt(0)!='-'&&b.charAt(0)=='-') {
                pNum = a;
                nNum = b.substring(1);
            }
            
            //正数绝对值大ispNumBig=1,负数绝对值大ispNumBig=2,两者绝对值相等ispNumBig=0;
            int ispNumBig = 0;
            if(nNum.length()>pNum.length()) {//负数大
                ispNumBig=2;
                bNum = nNum;
                sNum = pNum;    
            }
            else if(nNum.length()<pNum.length()) {//正数大
                ispNumBig=1;
                bNum = pNum;
                sNum = nNum;
            }
            else if(nNum.length()==pNum.length()) {
                //正数和负数长度相等
                for(int i=0;i<pNum.length();i++) {
                    if(nNum.charAt(i)-pNum.charAt(i)>0){
                        //负数大
                        ispNumBig=2;
                        bNum = nNum;
                        sNum = pNum;
                        break;
                    }                   
                    if(nNum.charAt(i)-pNum.charAt(i)<0) {
                        //正数大
                        ispNumBig=1;
                        bNum = pNum;
                        sNum = nNum;
                        break;
                    }else                       
                        continue;
                }
                if(ispNumBig==0) {
                    return "0";
                }               
            }
            while(sNum.length()<bNum.length()) {
                sNum = "0" +sNum;
            }
            
            int[] charSum = new int[bNum.length()];
            
            int flag = 0 ;
            for(int i=bNum.length()-1;i>=0;i--) {       
                charSum[i]=(10+bNum.charAt(i)-flag-sNum.charAt(i))%10;
                if(bNum.charAt(i)-flag-sNum.charAt(i)<0) {
                    flag = 1;
                }else {
                    flag = 0;
                }           
            }
            int k = 0;
            for(int i=0;i<charSum.length;i++) {
                if(k==0&&charSum[i]==0)
                    continue;               
                m = m+charSum[i];
                k=1;
            }
            if(ispNumBig==2) {
                m="-"+m;
            }   
        }   
        return m;
    }
}
图片.png
上一篇 下一篇

猜你喜欢

热点阅读