这个题就是,,,求一个一千多位的正整数大数字的平方根,,并且输出整数部分!!!
是一千多位的数字,,,不是千位数!!!
int只有32位double只有64位,,放不下这个大数字,这道题 怎么做?
我问了好多人,都没有明确的答案,,,所以 、、
我求这个题的全部代码!!!
------解决方案--------------------
你使用BigDecimal就行了
BigDecimal bg1 = new BigDecimal("11111111111111111111111111111111") ;
BigDecimal bg2 = new BigDecimal("3333333333333333333333333333333") ;
System.out.println(bg1.multiply(bg2)) ;
------解决方案--------------------
给你一个代码,效率不高,位数大的话速度很慢
- Java code
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位的数的倍数。