作者chchwy (mat)
看板NTUE-CS100
標題Re: [課業] 大數運算
時間Sun Dec 28 16:19:52 2008
首先要應付的問題就是,既然內建的型態都不能用,那怎麼記錄超大數呢?
一個辦法是用String,也就是當成字串來記。
比如說 String num = "1234567.89";
理論上String可以到達無限長 (只要你的電腦記憶體夠大...),這點倒是符合大數要求
但是實際上用String會碰上一些計算上的麻煩事。(比如說要找小數點在哪兒...)
我想各位應該有用過科學記號法吧
123.456 可以寫成 1.23456 * 10^2 (^代表次方的意思)
-0.00045 可以寫成 - 4.5 * 10^-4
科學記號就是一種非常有彈性的紀錄方式,不失精確性,又方便計算
所以我們打算用科學記號法來儲存大數。
首先我們自己定義一個新的型態叫做BigNum。
而這個BigNum裡面呢,就用類似科學記號的方式來紀錄大數。
科學記號法把一個數字切割成三塊 1.正負號 2.假數 3.次方
舉個例子來說 123.45 =(轉換)=> 1.2345 * 10^2
正負號: +
假數: 12345
次方: 2
這樣應該清楚不過了吧?
//程式化
class BigNum{
int sign; //0=正 1=負
StringBuffer mantissa; //用字串來記假數
int exp; //次方
}
到此為止,就踏出大數運算的第一步了。
--
夜精小德
Char - 巨龍之喉 (前
月神殿) PvP
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.68.15.209
推 didi12252001:舉個例子來說的假數 是12345 還是123456? 01/03 00:32
→ chchwy:XD 感謝指正 01/03 23:18
※ 編輯: chchwy 來自: 114.45.129.209 (01/03 23:18)