日期:2014-05-20 浏览次数:20739 次
String num = "111111"; int bit = (num.length()-1)/2; BigInteger big = new BigInteger("10"); big = big.pow(bit); while(big.pow(2).compareTo(new BigInteger(num)) < 0) { big = big.add(new BigInteger("1")); } System.out.println(big);
------解决方案--------------------
http://download.csdn.net/source/1352494
最近在考试, 实现了大数的加减乘除, 可以参考一下,
有问题发个mail.
基本思路是, 都转化为String, 按照手算的方式实现,
比如6789手算开平方,
由于长度为4, 开平方可以从100开始, 找到最大的80, 再从81算起,算到89,中间找到最大就返回,
和windows计算器比较了一下, 没有问题, 小数点后的数字舍弃了.
------解决方案--------------------
有没有可能用这种方法呢:
当一个数位有1000位,如1.............1,......中间代表有998位个1;
我直接截取前面的60位,即剩余的位数还有940位,也就是940个1,
我用Math.sqrt()方法求出前60位数(即1......1,....中间位58位)的平方根,然后直接就使用这个平方根和470个0(即剩余的940位除以2)连接起来,作为这个1000位数的平方根呢?
这个方法主要就是考虑到,那么大的位数,我取前面60位数作平方根和后面剩余位数/2连接起来的数作为这个大数的平方根近似相等于这个1000位数的准确的平方根,至于误差,当然对于这个1000位数来讲是很小的,当相对于我们平常所说的数却要大出470位的数的倍数。