当前位置:编程学习 > JAVA >>

面试题

今天面试了道面试题
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 楼 NNTT2010 的回复:
java.lang.OutOfMemoryError
4楼,不会报错的,亲自试下 --------------------编程问答-------------------- 结果超出int的范围,导致栈溢出 --------------------编程问答-------------------- 数字变小就是求阶乘的啊 --------------------编程问答--------------------
引用 楼主 jya126 的回复:
今天面试了道面试题
public static void main(String[] args) {
int n=1;
for(int i=1;i<=10000;i++){
n=n*i;
}
System.out.println(n);
}
答案始料未及,大家都解答下

int形式的,那么n最大就是2的32位,超出了之后的结果很自然。。 --------------------编程问答--------------------
引用 8 楼 sun1950 的回复:
测试了下结果是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.
 ……

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

引用 8 楼 sun1950 的回复:
测试了下结果是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.
 ……
--------------------编程问答-------------------- 学习了,谢谢LZ分享! --------------------编程问答-------------------- 超过了int所能表示的最大值,为啥不会跑出java.lang.OutOfMemoryError异常呢? --------------------编程问答-------------------- 32位,貌似不够啊。 --------------------编程问答-------------------- 谢谢楼主分享,学习 --------------------编程问答-------------------- 同问

引用 16 楼 huhui_bj 的回复:
超过了int所能表示的最大值,为啥不会跑出java.lang.OutOfMemoryError异常呢?
--------------------编程问答-------------------- 超过了int所能表示的最大值,为啥不会跑出java.lang.OutOfMemoryError异常呢? 

引用 13 楼 dracularking 的回复:
引用 8 楼 sun1950 的回复:测试了下结果是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次方的倍数时,整个……
--------------------编程问答-------------------- 不敢苟同,面试或笔试题的目的是抛砖引玉,借以考虑面试的知识体系及知识深度;
不知道这道题对于J2EE开发者来说,能考出什么 --------------------编程问答--------------------
引用 20 楼 skyxuyan 的回复:
超过了int所能表示的最大值,为啥不会跑出java.lang.OutOfMemoryError异常呢? 

引用 13 楼 dracularking 的回复:引用 8 楼 sun1950 的回复:测试了下结果是0。
i=31:1409286144
i=32:738197504
i=33:-2147483648
i=34:-2147483648
i=35:0
……

OutOfMemoryError 通常是因为堆内存不够,溢出了。和超过了int所能表示的最大值 这两者完全不沾边。建议补下java基础。 --------------------编程问答--------------------
引用 9 楼 jya126 的回复:
引用 4 楼 NNTT2010 的回复:java.lang.OutOfMemoryError4楼,不会报错的,亲自试下

楼主我错了,是0,下面的评论听对了。。我回去不基础了。
还有,谢谢楼主分享,这是一道好题。 --------------------编程问答-------------------- 让我想起了高斯的那个故事,求100!最后有多少个0
补充:Java ,  Java EE
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,