作者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
1F:推 didi12252001:举个例子来说的假数 是12345 还是123456? 01/03 00:32
2F:→ chchwy:XD 感谢指正 01/03 23:18
※ 编辑: chchwy 来自: 114.45.129.209 (01/03 23:18)