<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    (轉貼) 超大整數相加,超過了long的范圍,你要怎么做!

     

    引用:

     這個只能夠用字符串的形式來處理了,因為計算機能夠處理的最大是long型,本文以字符串的形式來進行超大數據的相加,理論上只要你的內存允許,相加多大的數都可以。

    /**

     * 超大整數相加:

     * 題目要求:如果系統要使用超大整數(超過long的范圍),請你設計一個數據結構來存儲這種

     * 超大型數字以及設計一種算法來實現超大整數的加法運算

     * @author Administrator

     *

     */

    public class VeryBigNumAdd {

     

        /**

         * @param args

         */

        public static void main(String[] args) {

           // TODO Auto-generated method stub

           /*

           String a="1223232";

           for(int i=a.length()-1;i>=0;i--)

           {

               System.out.print(a.charAt(i));

           }

           */

           VeryBigNumAdd vbn=new VeryBigNumAdd();

           String a="123453243455535634535252345234677576252241234123523453664563634";

           String b="123453243455535634535252345234677576252241234123523453664563634";

           String result=vbn.doAdd(a,b);

           System.out.println("result:"+result);

        }

        /**

         *

         * @param a 加數字符串1

         * @param b 加數字符串2

         * @return 結果字符串

         * 分析:

         * 1、取得兩個字符串的長度

         * 2、把兩個的長度做比較,并得出較長的長度,及較短的長度

         * 3、把長度較短的加數字符串,在左面補0,使之與較長的字符串一樣長

         * 4、從最高位,一個個數的取出來相加,當然首先得轉換為整型

         * 5、設置進位,如果兩個數相加及加上進位大于等于10,并且這不是最左邊一個字符相加,相加結果等于

         *    (取出1+取出2+進位)-10,并把進位設為1;如果沒有大于10,就把進位設為0,如些循環,把

         *    相加的結果以字符串的形式結合起來,就得到最后的結果

         */

        String doAdd(String a,String b)

        {

           String str="";

           int lenA=a.length();

           int lenB=b.length();

           int maxLen=(lenA>lenB) ? lenA : lenB;

           int minLen=(lenA<lenB) ? lenA : lenB;

           String strTmp="";

           for(int i=maxLen-minLen;i>0;i--)

           {

               strTmp+="0";

           }

           //把長度調整到相同

           if(maxLen==lenA)

           {

               b=strTmp+b;

           }else

               a=strTmp+a;

           int JW=0;//進位

           for(int i=maxLen-1;i>=0;i--)

           {        

               int tempA=Integer.parseInt(String.valueOf(a.charAt(i)));

               int tempB=Integer.parseInt(String.valueOf(b.charAt(i)));

               int temp;

               if(tempA+tempB+JW>=10 && i!=0)

               {

                  temp=tempA+tempB+JW-10;

                  JW=1;

               }

               else

               {

                  temp=tempA+tempB+JW;

                  JW=0;

               }        

               str=String.valueOf(temp)+str;        

           }

           return str;

        }

     

    }

     

    原帖地址: http://blog.csdn.net/fenglibing/archive/2007/08/23/1756773.aspx

        
        其實java 本身也提供了api ,java.math.BigInteger;import java.math.BigDecimal; 也可以實現。

    code :

    package com.kangdy.test;

    import java.math.BigInteger;
    import java.math.BigDecimal;

    public class NumberTest {
     public static void main(String args[]){
      BigInteger b1= new BigInteger("2222222222222222222222222");
      BigInteger b2= new BigInteger("8888888888888888888888888");
      BigDecimal b3 = new BigDecimal("66666666666666666666666666");
      BigDecimal b4 = new BigDecimal("9999999999999999999999999999");
      System.out.println(b1.add(b2).toString());
      System.out.println(b3.add(b4).toString());
     }
    }

    這里只是給出簡單的例子。



    posted on 2010-12-10 14:06 AK47 閱讀(927) 評論(0)  編輯  收藏 所屬分類: java相關

    <2010年12月>
    2829301234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    導航

    統計

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲AV日韩AV天堂一区二区三区| 成人无遮挡毛片免费看| 亚洲午夜福利精品久久| 国产亚洲视频在线观看网址| 好爽…又高潮了毛片免费看| 色老板亚洲视频免在线观| 韩国免费一级成人毛片| 亚洲国产精品成人综合久久久| 国产精品免费观看| 亚洲AV成人无码天堂| 在线观看人成网站深夜免费| 亚洲国产成人无码AV在线| heyzo亚洲精品日韩| 国产VA免费精品高清在线| 亚洲一区二区三区在线观看精品中文| 成人无码视频97免费| 国产精品国产亚洲精品看不卡| 久久久久国产精品免费免费不卡 | 久久精品无码专区免费青青| 亚洲国产精品人久久电影| 精品国产免费观看一区| 曰韩无码AV片免费播放不卡 | 最新中文字幕免费视频| 精品国产亚洲第一区二区三区| 亚洲国产成人乱码精品女人久久久不卡| 日韩免费在线中文字幕| 亚洲AV无码一区二区三区系列 | 天天影院成人免费观看| 亚洲精品乱码久久久久久蜜桃图片 | 亚洲成aⅴ人在线观看| 在线A级毛片无码免费真人| 日本中文字幕免费看| 亚洲AV无码久久精品蜜桃| 成年黄网站色大免费全看| 国产亚洲人成在线播放| 亚洲中文字幕在线第六区| 国产精品成人观看视频免费| 在线亚洲v日韩v| 亚洲国产综合精品中文第一区 | 亚洲AV成人精品日韩一区18p| 无码专区AAAAAA免费视频|