作者ric2k1 (Ric)
看板EE_DSnP
標題Re: [問題] 作業的問題...
時間Fri Oct 19 21:42:43 2007
※ 引述《DoraBoy (小多啦)》之銘言:
: 標題: [問題] 作業的問題...
: 時間: Fri Oct 19 05:39:21 2007
:
: 請問大家一下 第三題的程式是要寫說
:
: 要用32位元的型態來表示可以到64位元的某個數
:
: 還是說要輸入兩個很大的數(可以到2的64次方) 把彼此相加和相減的答案算出來阿
:
:
: --
:
※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 59.112.45.220
: 推 ric2k1:Yes. 要用32位元的型態來表示可以到64位元的某個數 10/19 12:00
: 推 DoraBoy:那add,subtract() 這兩個function是要幹麻的啊?? 是為了要 10/19 12:33
: → DoraBoy:能表示到64位元才需要用的嗎( 能不能只用加法就好了呢)?? 10/19 12:36
: → DoraBoy:還是說 不但要能表示64位元大小的數 還要能做加減法的運算 10/19 12:38
: 推 DoraBoy:所以 是只要能表示出使用者輸入的大數就好 還是要讓使用者 10/19 12:42
: → DoraBoy:輸入兩個到64位元的數 並做相加相減 證明 我們所寫出來的 10/19 12:43
: → DoraBoy:add,subtract() 是真的可以做加減運算的嗎?? 10/19 12:45
OK... 本來想說留多一點想像空間給大家,
不過這樣子反而讓大家對於題目有點搞不清楚...
來個參考攻略好了...
1. unsigned int 只能表示到 32-bit 的整數, 而題目規定不能使用 64-bit 的整數,
in either data members or member functions.
2. 所以要建立一個 class, 來包裝 "一些" variables, 讓他們 "一起" 可以表示到
64-bit (or slightly less) 的整數...
3. 課堂上舉例說明可以使用 "兩個 unsigned int" 當作 data members...
怎麼宣告呢?
比方說 ---
class DoubleInt
{
private:
int _highWord;
int _lowWord;
};
4. Intuitively, 一個 DoubleInt 的 object, say "DoubleInt dInt",
他的值 "可以" 定義為 dInt = _highWord * 2^32 + _lowWord.
這樣子一個 DoubleInt 的物件就可以表示到 2^64 的整數.
5. 題目說 constructor 要將 initial value 初始成為 0... 自己想.
6. 題目說要用 cin 輸入一些值來給 DoubleInt::readValue(...) 來設定它的 data
memebers 的值... 所以如果你的 data members 是兩個 unsigned int, 那麼你的
cin 要吃進什麼呢? (很 trivial 吧)
不過請 cout 一些 message 告訴 user 他該輸入什麼東西...
7. 困難的來了.
給定兩個 DoubleInt, 且讀入值 ---
DoubleInt dInt1, dInt2;
dInt1.readValue();
dInt2.readValue();
題目要大家寫一個 "add()" member function ---
dInt1.add(dInt2);
也就是說將 dInt2 的 value 加到 dInt1 且存回 dInt1.
過程中不准使用 64-bit 的整數... 要怎麼做呢?
要小心進位的問題喔!
8. 然後題目要大家寫一個 print() 將 data members 印出來, 這個應該簡單.
比較難的是 printDec()... 不過這個是 optional 的挑戰題.
就是要將數字用十進位印出來.
這個其實有難度, 我的暗示是也許你要犧牲一點 DoubleInt 可以表示的範圍...
不過這只是一種想法而已, 希望大家可以發揮一些創意. 也許從這個角度來說,
兩個 unsigned int 不是個好方法?
9. 當然也有人說可不可以用 string.
可以, 不過請討論一下 memory usage 以及執行的效率...
言盡至此, 希望大家都寫得出來...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.121.134.53