【发布时间】:2014-07-06 13:26:17
【问题描述】:
我搜索并找到了与此问题相关的主题,但在所有这些主题中,原因都是溢出(结果对于 int 类型来说太大了,对吧?)。 但在这种情况下,结果小于 int 的最大值,并且仍然从 2 个正数中产生一个负数。我想知道为什么。
代码如下:
int s = (50*49*48*47*46*45);
out.println(s);
OUTPUT:
-1443597888
现在当我尝试 449 而不是 49 时:
int s = (50*449*48*47*46*45);
out.println(s);
OUTPUT:
1760488896
那么为什么会这样呢? 我通常想计算 (50*49*48*47*46*45)/(1*2*3*4*5*6) 但它一直给出否定的结果。
感谢您的帮助。
哦,是的,我正在使用 Java,是一个非常早期的初学者,所以我对发生的事情一无所知。谢谢。
【问题讨论】:
-
请添加相关语言标签。
-
你认为 int 的最大值是多少?
-
我一般要计算(50*49*48*47*46*45)/(1*2*3*4*5*6) 所以,一般, 消除分子和分母中的公因数,就像手动计算该表达式一样。
-
@HighPerformanceMark,消除共同因素并非易事。在这里切换到更大的数据类型可能会更好。
-
@RYU:您可能希望使用BigInteger 类进行计算。