面试题
今天面试了道面试题public static void main(String[] args) {
int n=1;
for(int i=1;i<=10000;i++){
n=n*i;
}
System.out.println(n);
}
答案始料未及,大家都解答下 --------------------编程问答-------------------- 这个一看必须溢出啊。 --------------------编程问答-------------------- 0!!为什么啊 --------------------编程问答-------------------- 貌似要溢出了! --------------------编程问答-------------------- java.lang.OutOfMemoryError
--------------------编程问答-------------------- 整型变量一看就要溢出嘛 --------------------编程问答-------------------- 应该叫损失精度吧 --------------------编程问答-------------------- 超出了int可以定义的范围 --------------------编程问答-------------------- 测试了下结果是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. --------------------编程问答-------------------- 4楼,不会报错的,亲自试下 --------------------编程问答-------------------- 结果超出int的范围,导致栈溢出 --------------------编程问答-------------------- 数字变小就是求阶乘的啊 --------------------编程问答--------------------
int形式的,那么n最大就是2的32位,超出了之后的结果很自然。。 --------------------编程问答--------------------
的确,这一题是好题
只需32个2的因数相乘就可以让32位的int值变0,更何况10000!中至少含有5000个2的因数 --------------------编程问答-------------------- 必须
--------------------编程问答-------------------- 学习了,谢谢LZ分享! --------------------编程问答-------------------- 超过了int所能表示的最大值,为啥不会跑出java.lang.OutOfMemoryError异常呢? --------------------编程问答-------------------- 32位,貌似不够啊。 --------------------编程问答-------------------- 谢谢楼主分享,学习 --------------------编程问答-------------------- 同问
--------------------编程问答-------------------- 超过了int所能表示的最大值,为啥不会跑出java.lang.OutOfMemoryError异常呢?
--------------------编程问答-------------------- 不敢苟同,面试或笔试题的目的是抛砖引玉,借以考虑面试的知识体系及知识深度;
不知道这道题对于J2EE开发者来说,能考出什么 --------------------编程问答--------------------
OutOfMemoryError 通常是因为堆内存不够,溢出了。和超过了int所能表示的最大值 这两者完全不沾边。建议补下java基础。 --------------------编程问答--------------------
楼主我错了,是0,下面的评论听对了。。我回去不基础了。
还有,谢谢楼主分享,这是一道好题。 --------------------编程问答-------------------- 让我想起了高斯的那个故事,求100!最后有多少个0
补充:Java , Java EE