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

          /**

           *超大整數相加:

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

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

           *@authorAdministrator

           *

           */

          publicclass VeryBigNumAdd {

              /**

               *@paramargs

               */

              publicstaticvoid 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);

              }

              /**

               *

               *@parama加數字符串1

               *@paramb加數字符串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;

              }

          }

          posted on 2009-08-15 15:58 末日風情 閱讀(1065) 評論(0)  編輯  收藏 所屬分類: java編程
          <2009年8月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          常用鏈接

          留言簿(4)

          隨筆分類

          隨筆檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 涞水县| 象山县| 枣阳市| 凤凰县| 兴安盟| 永安市| 林州市| 咸阳市| 图片| 澄江县| 益阳市| 伊川县| 樟树市| 行唐县| 上蔡县| 长泰县| 祁连县| 梧州市| 塘沽区| 仙桃市| 新河县| 远安县| 昭通市| 洪泽县| 汶上县| 托克逊县| 肇州县| 泸州市| 宽甸| 房产| 时尚| 双鸭山市| 平乐县| 江油市| 来凤县| 乐陵市| 双城市| 邳州市| 宝坻区| 丘北县| 广昌县|