java BigInteger實現

來源:互聯網
上載者:User

標籤:思路   return   insert   tip   []   --   使用   integer   level   

BigInteger底層是用int[]實現的。

 

之前看資料結構,一直以為BigInteger是用鏈表實現的。但後來發現那隻是練習時增加難度所用。

之後發現用String實現比鏈表不知道快了多少倍。就以為是用String實現。

可是一查,才發現原來使用int[]實現的。

是啊,用int[]就省去了字元轉數位麻煩!

 

下面給出用String實現的加和乘演算法。思路和我們手算是一樣的。

 public String mulOneDigit(String num1, char digit, int level){        StringBuilder sb = new StringBuilder();        int carry = 0;        for (int i = num1.length()-1; i >= 0 || carry != 0;  i--){            int tmp = i < 0 ? 0 : num1.charAt(i) - ‘0‘;            sb.insert(0, (tmp * (digit-‘0‘) + carry) % 10);            carry = (tmp * (digit-‘0‘) + carry) / 10;        }        while (level > 0){            sb.append(0);            level--;        }        return sb.toString();    }  /**     * 用 ?: 來規避兩段迴圈,並注意最高位進一的情況     * @param num1     * @param num2     * @return     */    public String add(String num1, String num2){        StringBuilder sb = new StringBuilder();        int carry = 0;        for (int i = num1.length() - 1, j = num2.length() - 1;  i >= 0 || j>=0 || carry != 0; i--, j--){            int a = i < 0 ? 0 : num1.charAt(i) - ‘0‘;            int b = j < 0 ? 0 : num2.charAt(j) - ‘0‘;            sb.insert(0, (a+b+carry) % 10);            carry = (a+b+carry)/10;        }        return sb.toString();    }      public String multiply(String num1, String num2) {        String small, large;        if (num1.length() > num2.length()){            large = num1;            small = num2;        }else {            large = num2;            small = num1;        }        List<String> stringList = new ArrayList<>();        int level = 0;        for (int i = small.length()-1; i >= 0 ; i--) {            stringList.add(mulOneDigit(large, small.charAt(i), level++));        }        String result = "0";        for (String str : stringList){            result = add(str, result);        }        if (result.charAt(0) == ‘0‘){            result = "0";        }        return result;    }

  

java BigInteger實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.