找回密碼 或 安全提問
 註冊
|註冊|登錄

伊莉討論區

搜索
尊貴會員無限下載附件尊貴會員無限看帖不用回覆你準備好成為出色的版主了嗎?
無碼流出偷拍流出fc2rpgphotosho
完結mvsd 612twzp474封七月mbti異世界ビ

休閒聊天興趣交流學術文化旅遊交流飲食交流家庭事務PC GAMETV GAME
熱門線上其他線上感情感性寵物交流家族門派動漫交流貼圖分享BL/GL
音樂世界影視娛樂女性頻道潮流資訊BT下載區GB下載區下載分享短片
電腦資訊數碼產品手機交流交易廣場網站事務長篇小說體育運動時事經濟
上班一族博彩娛樂

同學,上課別打瞌睡

[繁]嘆氣的亡靈想隱退

[簡]成為名留歷史的壞

[繁]最狂輔助職業【話

打耳光可以 打車子就

[簡]重啟人生的千金小
C & C++ 語言C# 語言Visual Basic 語言PHP 語言JAVA 語言
查看: 1946|回復: 4
打印上一主題下一主題

[作業]大數運算[複製鏈接]

  高級幼兒生(30/200)

開始懷念石器

Rank: 1

帖子
453
積分
169 點
潛水值
25082 米
跳轉到指定樓層
樓主
發表於 2012-4-19 06:28 PM|只看該作者|倒序瀏覽
分享使你變得更實在,可以使其他人感到快樂,分享是我們的動力。今天就來分享你的資訊、圖片或檔案吧。
題目要求我們使用運算子多載進行大數運算,目前只有做出了加法
剩下的減乘除想不出來.......請各位幫幫忙

首先是header
  1. #ifndef HUGEINT_H
  2. #define HUGEINT_H

  3. #include <iostream>
  4. #include <string>
  5. using namespace std;

  6. class HugeInt
  7. {
  8.       friend ostream &operator<<( ostream &, const HugeInt &);
  9. public:
  10.        static const int digits=30;

  11.        HugeInt( long = 0 );
  12.        HugeInt( const string & );
  13.        HugeInt operator+( const HugeInt &) const;
  14.        HugeInt operator+( int )const;
  15.        HugeInt operator+( const string &) const;
  16. private:
  17.         short integer[ digits ];              
  18.       };

  19.       #endif
複製代碼


再來是主程式碼
  1. #include <cctype>
  2. #include "Hugeint.h"
  3. using namespace std;

  4. HugeInt::HugeInt( long value )
  5. {
  6. for( int i=0; i<digits; i++)
  7.       integer[ i ]=0;
  8. for( int j = digits-1; value != 0 && j >= 0; j--)
  9. {
  10.       integer[j]=value%10;
  11.       value /=10;
  12.       }
  13.                   }

  14. HugeInt::HugeInt( const string &number )
  15. {
  16. for( int i=0; i<digits; i++)
  17.       integer[ i ]=0;
  18. int length = number.size();

  19. for( int j = digits - length, k = 0; j<digits; j++, k++ )
  20.       if( isdigit( number[ k ] ) )
  21.           integer[ j ] = number[ k ] - '0';
  22.                   }

  23. HugeInt HugeInt::operator+( const HugeInt &op2) const
  24. {
  25. HugeInt temp;
  26. int carry=0;

  27. for( int i = digits-1; i >= 0; i--)
  28. {
  29.       temp.integer[ i ] = integer[ i ] + op2.integer[ i ] + carry;

  30.       if( temp.integer[ i ] > 9 )
  31.       {
  32.           temp.integer[ i ] %=10;
  33.           carry=1;
  34.           }
  35.       else
  36.           carry=0;
  37.       }
  38.       return temp;
  39.        }

  40. HugeInt HugeInt::operator+( int op2 )const
  41. {
  42.         return *this + HugeInt( op2 );
  43.         }

  44. HugeInt HugeInt::operator+( const string &op2 )const
  45. {
  46.         return *this + HugeInt( op2 );
  47.         }

  48. ostream& operator<<( ostream &output, const HugeInt &num )
  49. {
  50. int i;
  51. for( i=0; ( num.integer[ i ] == 0 ) && ( i <= HugeInt::digits ); i++ )
  52.       ;
  53. if( i== HugeInt::digits )
  54.      output << 0;
  55. else
  56.      for( ; i < HugeInt::digits; i++ )
  57.           output << num.integer[ i ];

  58.           return output;
  59.           }
  60. int main()
  61. {
  62.     HugeInt n1( 7654321 );
  63.     HugeInt n2( 7891234 );
  64.     HugeInt n3( "99999999999999999999999999999" );
  65.     HugeInt n4( "1" );
  66.     HugeInt n5;

  67.     cout << "n1 is " << n1 << "\nn2 is " << n2  << "\nn3 is " << n3 << "\nn4 is " << n4 << "\nn5 is " << n5 << "\n\n";

  68.     n5= n1 + n2;
  69.     cout << n1 << "+" << n2 << "=" << n5 << "\n\n";

  70.     cout << n3 << "+" << n4 << "=" << ( n3 + n4 ) << "\n\n";

  71.     n5 = n1 + 9;
  72.     cout << n1 << "+" << 9 << "=" << n5 << "\n\n";

  73.     n5 = n2 + "10000";
  74.     cout << n2 << "+" << "10000" << "=" << n5 <<"\n" << endl;

  75.     system("PAUSE");
  76.     return EXIT_SUCCESS;
  77. }
複製代碼


...
瀏覽完整內容,請先 註冊登入會員
分享分享0收藏收藏0支持支持0
分享使你變得更實在,可以使其他人感到快樂,分享是我們的動力。今天就來分享你的資訊、圖片或檔案吧。

使用道具檢舉

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

帖子
421
積分
1448 點
潛水值
48495 米
頭香
發表於 2012-4-20 08:37 AM|只看該作者
如果發覺自己無法使用一些功能或出現問題,請按重新整理一次,並待所有網頁內容完全載入後5秒才進行操作。
再多載一個'-'負號的運算子
a-b就做a+(-b)的運算
a*b就是做a+a做b次
a/b就是a-b做n次
回覆中加入附件並不會使你增加積分,請使用主題方式發佈附件。

使用道具檢舉

Rank: 1

帖子
120
積分
194 點
潛水值
3066 米
3
發表於 2012-4-30 07:58 PM|只看該作者
乘法的部分直接成就好囉~反正你都是用short~把進位的部分記下來就可以了,減法也差不多。
如果發覺自己無法使用一些功能或出現問題,請按重新整理一次,並待所有網頁內容完全載入後5秒才進行操作。

使用道具檢舉

Rank: 1

帖子
47
積分
107 點
潛水值
3345 米
4
發表於 2012-4-30 10:56 PM|只看該作者
如果瀏覽伊莉時速度太慢或無法連接,可以使用其他分流瀏覽伊莉,www01.eyny.com(02,03)。
參考
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

使用道具檢舉

Rank: 2Rank: 2

帖子
157
積分
435 點
潛水值
8293 米
5
發表於 2012-5-15 03:11 PM|只看該作者
若瀏覽伊莉的時侯發生問題或不正常情況,請使用Internet Explorer(I.E)。
以進位變數 來解決進位問題
-減法的退位也是,
*乘法的部分提供一個想法,
  a*b中 a的第n位與b的第m位相乘的結果放入 c的第n+m位內累加
  待a與b的每一個位數都相乘過後 ,將c做一次總進位。
  這樣的速度較快c的長度 可以是a的長度+b的長度
/除法請利用進位變數做長除法,也可以偷懶呼叫乘法來逼近答案喔!

以上僅提供個人相法...
瀏覽完整內容,請先 註冊登入會員





使用道具檢舉

您需要登錄後才可以回帖 登錄 | 註冊

Powered by Discuz!

© Comsenz Inc.

重要聲明:本討論區是以即時上載留言的方式運作,對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本討論區受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者發現有留言出現問題,請聯絡我們。有權刪除任何留言及拒絕任何人士上載留言,同時亦有不刪除留言的權利。切勿上傳和撰寫 侵犯版權(未經授權)、粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。
回頂部