日期:2014-05-20  浏览次数:20739 次

一个很大的数字求平方的的问题!!
这个题就是,,,求一个一千多位的正整数大数字的平方根,,并且输出整数部分!!!
是一千多位的数字,,,不是千位数!!!
  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位的数的倍数。