作者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