java 大数四则运算

上一篇 / 下一篇  2013-07-23 23:08:59 / 个人分类:开发知识

package com.zju.hw;

import java.util.Scanner;

public class BigCal {
     static public String calBigUnsignPlus(String first,String second){
        String result = new String();
        StringBuffer calTmp = new StringBuffer();
        char [] firstChars = first.toCharArray();
        char [] secondChars = second.toCharArray();
        int firstLength = firstChars.length;
        int secondLength = secondChars.length;
        int jinwei = 0;
        char cal = '0';
        for (int i=firstLength-1,j=secondLength-1;i>=0 || j>=0;i--,j--){
            if( i >= 0 && j >= 0){
            int f = Integer.parseInt(String.valueOf(firstChars[i]));
            int s = Integer.parseInt(String.valueOf(secondChars[j]));
            Integer tmp = f + s + jinwei;
            char [] tmpSum = tmp.toString().toCharArray();
            if (tmpSum.length == 2){
                jinwei = 1;
                cal = tmpSum[1];
            }
            else{
                if ( tmpSum.length == 1)
                {
                    jinwei = 0;
                    cal = tmpSum [0];
                }
        }
            calTmp.append(cal);
    }
            else{
                int ne = ( i >= 0)?Integer.parseInt(String.valueOf(firstChars[i])):
                Integer.parseInt(String.valueOf(secondChars[j]));
                Integer tmp = one + jinwei;
                char [] tmpSum = tmp.toString().toCharArray();
                if (tmpSum.length == 2){
                    jinwei = 1;
                    cal = tmpSum[1];
                }
                else{
                    if ( tmpSum.length == 1)
                    {
                        jinwei = 0;
                        cal = tmpSum [0];
                    }
            }
                calTmp.append(cal);
            }
        }
        result = calTmp.reverse().toString();
        return result;
}
    
     static public String calBigUnsignMinus(String first,String second){
            String result = new String();
            StringBuffer calTmp = new StringBuffer();
            String resultFinal = new String();
            int jiewei = 0 ;
            char cal = '0';
            String beijianshu = new String ();
            String flag ="";
            String jianshu = new String ();
            if (first.length() > second.length()){
                beijianshu = first;
                jianshu = second;
            }
            else {
                if  (first.length() < second.length()){
                    beijianshu = second;
                    jianshu = first;
                    flag = "-";
                }
                else {
                    if (first.compareTo(second) > 0){
                        beijianshu = first;
                        jianshu = second;
                    }
                    else {
                        beijianshu = second;
                        jianshu = first;
                        flag = "-";
                    }
                }
            }
            char [] beijian = beijianshu.toCharArray();
            char [] jians = jianshu.toCharArray();
            for (int i = beijian.length-1,j=jians.length-1;i>=0 || j>=0; i--,j--){
                if (i>=0 && j>=0){
                Integer bjs = Integer.parseInt(String.valueOf(beijian[i]));
                Integer js = Integer.parseInt(String.valueOf(jians[j]));
                Integer tmp = bjs - js - jiewei + 10;
                char [] tmpSum = tmp.toString().toCharArray();
                if (tmpSum.length == 2){
                    jiewei = 0;
                    cal = tmpSum[1];
                }
                else{
                    if ( tmpSum.length == 1)
                    {
                        jiewei = 1;
                        cal = tmpSum [0];
                    }
            }
                calTmp.append(cal);
                }
                else {
                    Integer bjs = Integer.parseInt(String.valueOf(beijian[i]));
                    Integer tmp = bjs - jiewei + 10;
                    char [] tmpSum = tmp.toString().toCharArray();
                    if (tmpSum.length == 2){
                        jiewei = 0;
                        cal = tmpSum[1];
                    }
                    else{
                        if ( tmpSum.length == 1)
                        {
                            jiewei = 1;
                            cal = tmpSum [0];
                        }
                }
                    calTmp.append(cal);
                }
            }
            result = calTmp.reverse().toString();
            result = result.replaceFirst("^0+", "");
            if (result.length() == 0){
                resultFinal = "0";
            }
            else
            resultFinal = flag+result;
         return resultFinal;
     }
     
     static public String calBigUnsignMul(String first,String second){
            String result = new String();
            StringBuffer calTmp ;
            char [] firstChars = first.toCharArray();
            char [] secondChars = second.toCharArray();
            int jinwei = 0 ;
            char cal = '0';
            String [] sumPer = new String [firstChars.length+1];
            for (int i=firstChars.length-1,k=0,l=firstChars.length;i>=0;i--,l--,k++){
                calTmp = new StringBuffer();
                for (int z=0;z<k;z++){
                    calTmp.append('0');
                }
                int f = Integer.parseInt(String.valueOf(firstChars[i]));
                for (int j=secondChars.length-1;j>=0;j--){
                    int s = Integer.parseInt(String.valueOf(secondChars[j]));
                    Integer tmp = f * s + jinwei;
                    char [] tmpMul = tmp.toString().toCharArray();
                    if (tmpMul.length == 2){
                        jinwei = Integer.valueOf(String.valueOf(tmpMul[0]));
                        cal = tmpMul[1];
                    }
                    else {
                        jinwei = 0;
                        cal = tmpMul[0];
                    }
                    calTmp.append(cal);
                }
                sumPer[l] = calTmp.reverse().toString().replaceFirst("^0", "");
            }
            calTmp = new StringBuffer();
            for (int z=0;z<=firstChars.length;z++){
                calTmp.append('0');
            }
            calTmp.append(jinwei);
            sumPer[0] = calTmp.reverse().toString();
            String first1 = new String ();
            String second1 = new String();
            if (sumPer.length <= 1)
                result = sumPer[0];
            else{
                first1 = sumPer[0];
                for (int i=1;i<sumPer.length;i++){
                    second1 = sumPer[i];
                    first1 = BigCal.calBigUnsignPlus(first1, second1);
                }
                result = first1;
            }
            result = result.replaceFirst("^0+", "");
            if (result.length() == 0)
                result = "0";
;            return result;
     }
     
     static public String calBigUnsignDiv(String first,String second){
            String result = "";
            String yushu = new String();
            String beichushu = new String();
            String chushu = new String();
            if (first.length() > second.length()){
                beichushu = first;
                chushu = second;
            }
            else {
                if  (first.length() < second.length()){
                    result = "0:" + first;
                    return result;
                }
                else {
                    if (first.compareTo(second) >= 0){
                        beichushu = first;
                        chushu = second;
                    }
                    else {
                        result = "0:" + first;
                        return result;
                    }
                }
            }
            StringBuffer tmpResult = new StringBuffer();
            if(chushu.length()==1)
                yushu = "";
            else
            yushu = beichushu.substring(0,chushu.length()-1);
            int count = 0;
            char []beichushuArrays = beichushu.toCharArray();
            for (int i = chushu.length()-1;i<beichushu.length();i++){
                count = 0;
                if (yushu.startsWith("-")){
                    yushu = BigCal.calBigUnsignMinus(chushu,yushu.replaceAll("^-", ""));
                }
                yushu = (yushu + Character.valueOf(beichushuArrays[i]).toString()).replaceFirst("^0+", "");
                String tmp = BigCal.calBigUnsignMinus(yushu,chushu);
                yushu = tmp;
                while (!tmp.startsWith("-")){
                    count++;
                    yushu = tmp;
                    tmp = BigCal.calBigUnsignMinus(yushu, chushu);
                }
                tmpResult.append(Integer.valueOf(count).toString());
            }
            if (yushu.startsWith("-")){
                yushu = BigCal.calBigUnsignMinus(chushu,yushu.replaceAll("^-", ""));
            }
            if (result.equals("")){
                yushu = yushu.replaceFirst("^0+", "");
                yushu = (yushu.length()==0)?"0":yushu;
                result = tmpResult.toString().replaceFirst("^0+", "")+ ":" + yushu;
            }
            else
                result = "0:"+ yushu.replaceFirst("^0+", "");
            return result;
      }

     static public String callPlus(String first,String second){
         String result = new String();
         if (!first.startsWith("-")&&!second.startsWith("-")){
             result = BigCal.calBigUnsignPlus(first, second);
         }
         else {
             if (first.startsWith("-") && second.startsWith("-")){
                 result = BigCal.calBigUnsignPlus(first.replaceFirst("^-",""), second.replaceFirst("^-", ""));
                 result = "-" + result;
             }
             else {
                 if (first.startsWith("-") && !second.startsWith("-")){
                     result = BigCal.calBigUnsignMinus(second, first.replaceFirst("^-", ""));
                 }
                 else
                 {
                     if (!first.startsWith("-") && second.startsWith("-"))
                     result = BigCal.calBigUnsignPlus(first, second.replaceFirst("^-", ""));
                 }
             }
         }
         return result;
     }

     static public String callMinus(String first,String second){
         String result = new String();
         if (!first.startsWith("-") && !second.startsWith("-"))
             result = BigCal.calBigUnsignMinus(first, second);
             else {
                 if(first.startsWith("-") && second.startsWith("-")){
                     result = BigCal.calBigUnsignMinus(second.replaceFirst("^-", ""), first.replaceFirst("^-", ""));
                 }
                 else {
                     if (first.startsWith("-") && !second.startsWith("-")){
                         result = BigCal.calBigUnsignPlus(first.replaceFirst("^-", ""), second);
                         result = "-" + result;
                     }
                     else {
                         if (!first.startsWith("-") && second.startsWith("-")){
                             result = BigCal.callPlus(first, second.replaceFirst("^-", ""));
                         }
                     }
                 }
         }
         return result;
     }

     static public String calMul(String first,String second){
         String result = new String();
         if (first.startsWith("-") || second.startsWith("-")){
             result = BigCal.calBigUnsignMul(first.replaceFirst("^-", ""), second.replaceFirst("^-", ""));
             result = "-" + result;
         }
         else
             result = BigCal.calBigUnsignMul(first, second);
         return result;
     }
   
     static public String calDiv(String first,String second){
         String result = new String();
         if (!first.startsWith("-") && !second.startsWith("-")){
             result = BigCal.calBigUnsignDiv(first, second);
         }
         else if (first.startsWith("-") && second.startsWith("-")){
             result = BigCal.calBigUnsignDiv(first.replaceFirst("^-", ""), second.replaceFirst("^-", ""));
             String [] tmp = result.split(":",-1);
             if (!tmp[1].equals("0")){
                 String shang = BigCal.calBigUnsignPlus(tmp[0].replaceFirst("^-", ""), "1");
                 String yushu = BigCal.calBigUnsignMinus(second.replaceFirst("^-", ""), tmp[1].replaceFirst("^-", ""));
                 result = shang +":"+yushu;
             }
         }
         else {
             if (!first.startsWith("-") && second.startsWith("-")){
                 result = BigCal.calBigUnsignDiv(first.replaceFirst("^-", ""), second.replaceFirst("^-", ""));
                 String [] tmp = result.split(":",-1);
                 if (!tmp[1].equals("0")){
                     String shang = BigCal.calBigUnsignPlus(tmp[0], "1");
                     String yushu = BigCal.calBigUnsignMinus(second.replaceFirst("^-", ""), tmp[1].replaceFirst("^-", ""));
                     result = "-"+shang +":"+yushu;
                 }
                 else
                 result = "-"+result ;
             }
             else if (first.startsWith("-") && !second.startsWith("-")){
                 result = BigCal.calBigUnsignDiv(first.replaceFirst("^-", ""), second);
                 String [] tmp = result.split(":",-1);
                 if (!tmp[1].equals("0")){
                     String shang = BigCal.calBigUnsignPlus(tmp[0], "1");
                     String yushu = BigCal.calBigUnsignMinus(second, tmp[1].replaceFirst("^-", ""));
                     result = "-"+shang +":"+yushu;
                 }
                 else
                 result = "-"+result ;
             }
         }
         return result;
         
     }
     
     public static void main(String args[]){
        String first = "";
        String second = "";
        Scanner scanner = new Scanner(System.in);
        System.out.print("please input two big number:\n");
        first= scanner.nextLine();
        second = scanner.nextLine();
        String result = BigCal.calBigUnsignMinus(first, second);
        System.out.println("Minus result = " + result);
        result = BigCal.calBigUnsignPlus(first, second);
        System.out.println("Plus result = "+result);
        result = BigCal.calBigUnsignMul(first, second);
        System.out.println("Mul result = "+result);
        result = BigCal.calDiv(first, second);
        System.out.println("Div result = "+result);
    }
}
 

TAG:

 

评分:0

我来说两句

Open Toolbar