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

伊莉討論區

搜索
請尊重及感激所有版主付出和奉獻尊貴會員無限看帖不用回覆搞笑、娛樂、精彩的影片讓你看
神奇寶貝一拳超人催眠julia母乳幼女安卓
overlord邊境之村空間漁夫討滅戦姫不可思議外流台灣ipzz 407

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

[繁]再見龍生,你好人

[簡]神之塔 第二季16-

[繁]Acro Trip 頂尖惡

2025年1月新番『S級怪

[繁]機械臂04-

[繁]刀劍神域外傳 Gun
C & C++ 語言C# 語言Visual Basic 語言PHP 語言JAVA 語言
查看: 1948|回復: 4
打印上一主題下一主題

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

  高級幼兒生(30/200)

開始懷念石器

Rank: 1

帖子
453
積分
169 點
潛水值
25082 米
跳轉到指定樓層
樓主
發表於 2012-4-19 06:28 PM|只看該作者|倒序瀏覽
如果發覺自己無法使用一些功能或出現問題,請按重新整理一次,並待所有網頁內容完全載入後5秒才進行操作。
題目要求我們使用運算子多載進行大數運算,目前只有做出了加法
剩下的減乘除想不出來.......請各位幫幫忙

首先是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
若對尊貴或贊助會員有任何疑問,歡迎向我們查詢。我們的即時通或MSN: admin@eyny.com

使用道具檢舉

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

帖子
421
積分
1448 點
潛水值
48495 米
頭香
發表於 2012-4-20 08:37 AM|只看該作者
回覆中加入附件並不會使你增加積分,請使用主題方式發佈附件。
再多載一個'-'負號的運算子
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~把進位的部分記下來就可以了,減法也差不多。
回覆中加入附件並不會使你增加積分,請使用主題方式發佈附件。

使用道具檢舉

Rank: 1

帖子
47
積分
107 點
潛水值
3345 米
4
發表於 2012-4-30 10:56 PM|只看該作者

使用道具檢舉

Rank: 2Rank: 2

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

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





若對尊貴或贊助會員有任何疑問,歡迎向我們查詢。我們的即時通或MSN: admin@eyny.com

使用道具檢舉

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

Powered by Discuz!

© Comsenz Inc.

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