黑马程序员技术交流社区

标题: 1000!有几位数,为什么? [打印本页]

作者: 紫薰iy    时间: 2014-10-25 12:44
标题: 1000!有几位数,为什么?
微软面试题,主要谈谈 为什么?

作者: xiaochongbojue    时间: 2014-10-25 16:51
想不出来,有答案吗
作者: qq8921310    时间: 2014-10-25 17:26
先把java看好再看C++不迟。
作者: yueyazhishang    时间: 2014-10-25 17:31
是在考察Java的BigInteger吧,位数是2568。
作者: 紫薰iy    时间: 2014-10-25 22:12
xiaochongbojue 发表于 2014-10-25 16:51
想不出来,有答案吗

有啊,2568
作者: 笑望长空,逆转    时间: 2014-10-25 22:14
考的是逻辑题吧。
1×2×3×……×1000的位数是log+log2+log3+……+log1000
知道原理编一个小程序很容易求出位数的。结果是2568位
原理是:求多个数相乘的位数只要求他的常用对数和就可以。
作者: 紫薰iy    时间: 2014-10-25 22:15
qq8921310 发表于 2014-10-25 17:26
先把java看好再看C++不迟。

这和C++有关系吗?
作者: 紫薰iy    时间: 2014-10-25 22:19
yueyazhishang 发表于 2014-10-25 17:31
是在考察Java的BigInteger吧,位数是2568。

不是的,我有答案可是不明白的
作者: 紫薰iy    时间: 2014-10-25 22:21
package com.ming.test.test9999;
class Test
{
        public static void main(String[] args)
        {
                double sum = 0;
                double log;
                for(int i = 2 ; i <=1000 ; i ++)
                {
                        log = Math.log(i)/Math.log(10);//ln1000+ln999+.......ln2
                        sum+=log;
                }
                System.out.println(sum);

        }
}

作者: 紫薰iy    时间: 2014-10-25 22:22
笑望长空,逆转 发表于 2014-10-25 22:14
考的是逻辑题吧。
1×2×3×……×1000的位数是log+log2+log3+……+log1000
知道原理编一个小程序很容易求 ...

能不能解释一下原理?
作者: ジ旋律    时间: 2014-10-25 22:32
哦,原来这么回事
作者: zhappy    时间: 2014-10-26 08:44
大数运算用C++比较合适
作者: yueyazhishang    时间: 2014-10-26 09:30
zhappy 发表于 2014-10-26 08:44
大数运算用C++比较合适

说明你java还没有入门!
作者: yueyazhishang    时间: 2014-10-26 09:32
紫薰iy 发表于 2014-10-25 22:19
不是的,我有答案可是不明白的

我既然可以给你答案就自然之道解法,不知道说的“不是的”是什么意思!而且我已经给了你明确的暗示用哪个知识点,想不通你为何去否定而不是按照给你提供的思路自己去想一下。
作者: zhappy    时间: 2014-10-26 09:34
yueyazhishang 发表于 2014-10-26 09:30
说明你java还没有入门!

随便怎么说了,反正对于编程语言的评价一个人一个看法,各有各的理由。
作者: 笑望长空,逆转    时间: 2014-10-27 09:09
紫薰iy 发表于 2014-10-25 22:22
能不能解释一下原理?

求多个数相乘的位数只要求他的常用对数和就可以
作者: 紫薰iy    时间: 2014-10-30 16:14
yueyazhishang 发表于 2014-10-26 09:32
我既然可以给你答案就自然之道解法,不知道说的“不是的”是什么意思!而且我已经给了你明确的暗示用哪个 ...

我看到的解法和你的说法不一样的。至于你说的BigInteger,我不能了解,如果你有更好的思路,可以解释一下吗
作者: yueyazhishang    时间: 2014-10-30 20:53
紫薰iy 发表于 2014-10-30 16:14
我看到的解法和你的说法不一样的。至于你说的BigInteger,我不能了解,如果你有更好的思路,可以解释一下 ...
  1. public class BigIntegerDemo {
  2.         public static void main(String[] args) {
  3.                 BigInteger big= BigInteger.ONE;//初始化BigInteger值为1
  4.                 for(int i=1;i<=1000;i++){
  5.                         big=big.multiply(BigInteger.valueOf(i));//累乘,也就是计算1000!
  6.                 }
  7.                 System.out.println(big.toString().length());//取得结果的长度
  8.                
  9.         }
  10. }
复制代码



我在提示中已经给出了思路,楼主应该自己动手去做。你看到我的代码后就知道我为什么说要你自己动手去做了,因为简单的不能再简单了。还有有位哥们说处理大数据用C++(用数组去模拟),我说他Java没有入门(我也是小白),希望他看了我的代码明白我为什么说他Java没有入门。



作者: 紫薰iy    时间: 2014-10-30 22:41
yueyazhishang 发表于 2014-10-30 20:53
我在提示中已经给出了思路,楼主应该自己动手去做。你看到我的代码后就知道我为什么说要你自己动手去做 ...

恩恩,感谢分享,可我没有接触过BigInteger。我以为又是构造其他的类呢,自己写关于大数之间的运算。之前看了一个关于设计几亿和几亿之间的运算,设计思路。我当做类似的了。受教了
作者: ll_shitou    时间: 2014-10-31 13:23
都是牛人

作者: 79819275    时间: 2014-11-5 21:20
package com.lk.pool;

public class Test {
        public static void main(String[] args) {
        double count = 0;
        for(int i = 2 ; i <=1000 ; i ++)
        {
                count+=Math.log10(i);
        }
        System.out.println((int)(count+1));
        }
}
2568位
作者: 邹中源    时间: 2014-11-6 20:06
进黑马要这样的吗
作者: VicenteZ    时间: 2014-11-7 00:37
来学习了
作者: 紫薰iy    时间: 2014-11-7 23:01
邹中源 发表于 2014-11-6 20:06
进黑马要这样的吗

不清楚呢  反正 我是不要去了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2