精華區beta NTUE-CS100 關於我們 聯絡資訊
首先要應付的問題就是,既然內建的型態都不能用,那怎麼記錄超大數呢? 一個辦法是用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)