今天面试了道面试题
public static void main(String[] args) {
int n=1;
for(int i=1;i<=10000;i++){
n=n*i;
}
System.out.println(n);
}
答案始料未及,大家都解答下

解决方案 »

  1.   

    测试了下结果是0。
    i=31:1409286144
    i=32:738197504
    i=33:-2147483648
    i=34:-2147483648
    i=35:0
    i=36:0
    i=37:0
    原因:int存储是32位,按2进制存储数据.当数据为2的倍数时,最后一位为0,4的倍数最后两位为0,当2的32次方的倍数时,整个32位都存储的0,结果也展示为0.
      

  2.   

    结果超出int的范围,导致栈溢出
      

  3.   

    int形式的,那么n最大就是2的32位,超出了之后的结果很自然。。
      

  4.   

    的确,这一题是好题
    只需32个2的因数相乘就可以让32位的int值变0,更何况10000!中至少含有5000个2的因数
      

  5.   

    超过了int所能表示的最大值,为啥不会跑出java.lang.OutOfMemoryError异常呢?
      

  6.   

    超过了int所能表示的最大值,为啥不会跑出java.lang.OutOfMemoryError异常呢? 
      

  7.   

    不敢苟同,面试或笔试题的目的是抛砖引玉,借以考虑面试的知识体系及知识深度;
    不知道这道题对于J2EE开发者来说,能考出什么
      

  8.   

    OutOfMemoryError 通常是因为堆内存不够,溢出了。和超过了int所能表示的最大值 这两者完全不沾边。建议补下java基础。