posts - 104,  comments - 34,  trackbacks - 0
          這個(gè)只能夠用字符串的形式來處理了,因?yàn)橛?jì)算機(jī)能夠處理的最大是long型,本文以字符串的形式來進(jìn)行超大數(shù)據(jù)的相加,理論上只要你的內(nèi)存允許,相加多大的數(shù)都可以。

          /**

           *超大整數(shù)相加:

           *題目要求:如果系統(tǒng)要使用超大整數(shù)(超過long的范圍),請你設(shè)計(jì)一個(gè)數(shù)據(jù)結(jié)構(gòu)來存儲(chǔ)這種

           *超大型數(shù)字以及設(shè)計(jì)一種算法來實(shí)現(xiàn)超大整數(shù)的加法運(yùn)算

           *@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加數(shù)字符串1

               *@paramb加數(shù)字符串2

               *@return結(jié)果字符串

               *分析:

               *1、取得兩個(gè)字符串的長度

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

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

               *4、從最高位,一個(gè)個(gè)數(shù)的取出來相加,當(dāng)然首先得轉(zhuǎn)換為整型

               *5、設(shè)置進(jìn)位,如果兩個(gè)數(shù)相加及加上進(jìn)位大于等于10,并且這不是最左邊一個(gè)字符相加,相加結(jié)果等于

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

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

               */

              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";

                 }

                 //把長度調(diào)整到相同

                 if(maxLen==lenA)

                 {

                     b=strTmp+b;

                 }else

                     a=strTmp+a;

                 int JW=0;//進(jìn)位

                 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 末日風(fēng)情 閱讀(1069) 評論(0)  編輯  收藏 所屬分類: java編程
          <2009年8月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          常用鏈接

          留言簿(4)

          隨筆分類

          隨筆檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 陕西省| 天峻县| 鹤庆县| 乌兰浩特市| 卫辉市| 增城市| 金湖县| 云浮市| 怀安县| 翼城县| 万载县| 洛南县| 合阳县| 瑞昌市| 册亨县| 和静县| 蒙自县| 刚察县| 长沙市| 开阳县| 忻城县| 兴安县| 康平县| 大同市| 探索| 泸西县| 聊城市| 获嘉县| 青海省| 长岛县| 昭通市| 抚顺市| 信阳市| 惠水县| 高碑店市| 东港市| 赣州市| 资溪县| 福州市| 毕节市| 古蔺县|