A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 紫薰iy 中级黑马   /  2014-10-25 12:44  /  3713 人查看  /  29 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

微软面试题,主要谈谈 为什么?

29 个回复

倒序浏览
想不出来,有答案吗
回复 使用道具 举报
先把java看好再看C++不迟。
回复 使用道具 举报
是在考察Java的BigInteger吧,位数是2568。
回复 使用道具 举报
xiaochongbojue 发表于 2014-10-25 16:51
想不出来,有答案吗

有啊,2568
回复 使用道具 举报
考的是逻辑题吧。
1×2×3×……×1000的位数是log+log2+log3+……+log1000
知道原理编一个小程序很容易求出位数的。结果是2568位
原理是:求多个数相乘的位数只要求他的常用对数和就可以。

评分

参与人数 1技术分 +1 收起 理由
王震阳老师 + 1 赞一个!

查看全部评分

回复 使用道具 举报
qq8921310 发表于 2014-10-25 17:26
先把java看好再看C++不迟。

这和C++有关系吗?
回复 使用道具 举报
yueyazhishang 发表于 2014-10-25 17:31
是在考察Java的BigInteger吧,位数是2568。

不是的,我有答案可是不明白的
回复 使用道具 举报
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);

        }
}

点评

不是求的自然对数的和, 是求的以10为底对数的和, 你想想1000是10的三次方 位数应该等于Math.log10(1)+Math.log10(2)+...+Math.log10(1000)的和再加1 应该是2568  发表于 2014-11-5 21:14
你备注的写法是错误的,还有求Math.log()本来就是以e为底,你除以Math.log(10) 最后得到的是Math.log10(),以10为底的对数,  发表于 2014-11-5 21:10

评分

参与人数 1技术分 +1 收起 理由
王震阳老师 + 1 赞一个!

查看全部评分

回复 使用道具 举报
笑望长空,逆转 发表于 2014-10-25 22:14
考的是逻辑题吧。
1×2×3×……×1000的位数是log+log2+log3+……+log1000
知道原理编一个小程序很容易求 ...

能不能解释一下原理?
回复 使用道具 举报
chensc 金牌黑马 2014-10-25 22:28:35
11#
学习学习!
回复 使用道具 举报
ジ旋律 来自手机 中级黑马 2014-10-25 22:32:45
12#
哦,原来这么回事
回复 使用道具 举报
zhappy 中级黑马 2014-10-26 08:44:57
13#
大数运算用C++比较合适
回复 使用道具 举报
zhappy 发表于 2014-10-26 08:44
大数运算用C++比较合适

说明你java还没有入门!
回复 使用道具 举报
紫薰iy 发表于 2014-10-25 22:19
不是的,我有答案可是不明白的

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

随便怎么说了,反正对于编程语言的评价一个人一个看法,各有各的理由。
回复 使用道具 举报
紫薰iy 发表于 2014-10-25 22:22
能不能解释一下原理?

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

我看到的解法和你的说法不一样的。至于你说的BigInteger,我不能了解,如果你有更好的思路,可以解释一下吗
回复 使用道具 举报
紫薰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没有入门。


回复 使用道具 举报
yueyazhishang 发表于 2014-10-30 20:53
我在提示中已经给出了思路,楼主应该自己动手去做。你看到我的代码后就知道我为什么说要你自己动手去做 ...

恩恩,感谢分享,可我没有接触过BigInteger。我以为又是构造其他的类呢,自己写关于大数之间的运算。之前看了一个关于设计几亿和几亿之间的运算,设计思路。我当做类似的了。受教了
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马