前面三個學期學了程式設計、資料結構、演算法,在進入物件的世界之前、在擴大自己撰寫的程式規模之前,先用這個作業回憶一下變數、迴圈、陣列、結構、動態記憶體配置、以及函式的語法,練習一下程式設計、測試、與修正的步驟。大整數的加減乘除的動作在 C/C++ 中基本上沒有現成可以用的工具,如果不要求效率的話,也不需要特別的演算法,就是實作你平常手動計算加減乘除的步驟而已,如果你希望有比較簡單的大整數拷貝的話,可以用結構的語法來設計存放資料的基礎單元;實際上如何運用陣列儲存一個大整數資料和寫出來的程式容不容易看得懂有很大的關係, 此外也可以作一些調整來減少存放每一個大整數所需要的記憶體。
這個作業希望大家寫的程式就是處理整數以及它們的基礎運算而已, 但是程式需要能夠處理到十進位 100 位數的整數, 這樣子的機制在金融系統中處理鉅額的款項時需要用到, 在密碼學裡也用得非常頻繁,在競賽程式裡也會看到很多需要使用大整數來計算的問題。這裡要求的大整數不能夠用 C/C++ 裡的 short, long, int, long long, double, 甚至 long double 型態來表示, 因為 short, long, int, long long 型態能夠存放的資料都有大小的上限,分別是 65536, ~4.1*109, ~1.8*1019,不能夠表示更大的數字了, 而 double 類型雖然可以表示到 10308 的數字, 但是在表示這樣的數字時卻有大約 10290 的誤差, 這樣的誤差在上面很多應用程式中沒有辦法容忍的。
因此你必須設計資料結構來表示一個大的整數, 例如用字元陣列或是整數陣列來表示,每一個元素儲存十進位的一個位數 (當然也可以是其它進位制,也可以存放不只一位數),也需要表達數字的正負號,也需要實作你所熟悉的整數加減乘除的動作。
> 12345678901234567890-23084753209485940893245893245 -23084753197140261992011325355 > 0010834589324583253 + 12121212123 10834601445795376 > 23455428* 12456789 292179317500692 > 9879834343 / 212146 46570 195123 > 2468246824==2468246824 1 > 2468246824 == 2468346824
0 > 2468246824<2468246124 0 > quit 藍字部份是使用者輸入的,除法的答案中前面是商後面是餘數,+ - * / == 的前後可以有空格或是沒有空格,測試相等或是大小時輸出 1 代表關係正確,0 代表錯誤
回
C++ 物件導向程式設計課程
首頁
製作日期: 02/22/2017 by 丁培毅 (Pei-yih Ting) E-mail: pyting@mail.ntou.edu.tw TEL: 02 24622192x6615 海洋大學 電機資訊學院 資訊工程學系 Lagoon |