当前位置: 首页 > 面试题库 >

使用正数在Java中以乘法给出负值的整数

牟华翰
2023-03-14
问题内容

public class Test {

    public static void main(String[] args) {    
        int sum=0;
        for(int i=1;i<10;i++)
            sum = sum+i*i*i*i*i*i*i*i*i*i;
        System.out.println(sum);

    }    
}

OUTPUT:619374629

    for(int i=1;i<10;i++)
        sum = sum+i*i*i*i*i*i*i*i*i*i*i;
    System.out.println(sum);

       OUTPUT:
        -585353335

在第二个输出中,我认为整数范围已过,但是为什么要给出数字,它-ve需要给我一个错误,这种行为的原因是什么?

提前致谢…


问题答案:

您溢出了32位整数的大小。

考虑当我等于10时会发生什么:

sum = sum + 100000000000 //1 with 11 zeroes

但是可以存储在32位整数中的最大正数仅为20亿左右(2个带有9个零)。

实际上,情况变得更糟!中间计算将以有限的精度执行,并且一旦10 * 10 * 10 * 10
…的乘积溢出,那么10s将与一个奇怪的负数相乘,并且已经是错误的。

因此,最终得到的数字似乎并没有遵循任何算术规则,但实际上,一旦您知道原始整数的存储空间有限,它就非常有意义。

解决方案是使用64位long,希望您也不要溢出,如果需要的话,则需要BigInteger



 类似资料:
  • 问题内容: 为什么以下计算会产生负值? 问题答案: 正在评估其中的每个表达式(当然是在编译时;它是一个常量),而不是。结果在某个时候溢出。因此,只需使所有操作数文字变长即可: 当然,仅使 一些 操作数变长就可以逃脱,但是我倾向于发现仅更改所有内容会更容易。 综上所述,如果您要查找“ 30天的毫秒数”,最好使用:

  • 问题内容: 如果这样做,我遇到了Java 类问题: 这就是我得到的: 从我阅读的内容来看,应该只返回一个正数作为开始? 这可能有点牵强,但与在Windows 7 64位上运行64位计算机没有关系吗? 任何帮助都非常需要今天完成任务分配! 问题答案: 从Java文档中获得: 所有2 32个 可能的int值都是(近似)相等的概率产生的。 一种方法是使用以下转换: 之所以需要这样的原因(与使用绝对值或取

  • 我写了一个代码,在两个数相除后求出商,但不使用乘法、除法或mod运算符。 我的代码 我的代码通过了像分红=-1、除数=1或分红=1和除数=-1这样的测试用例。但是它不能通过像分红=--2147483648和除数=-1这样的测试用例。但是当两个输入都是负数时,我有一个if语句。 当我的输入为-2147483648和-1时,它返回零。我调试了代码,发现它无法到达while循环的内部语句。它只是检查wh

  • 问题内容: 我通过执行以下功能将传入的字符串转换为哈希码,但其中一些值为负数。我不认为哈希值应该为负。请告诉我我在做什么错。 问题答案: 我不认为哈希值应该为负。 为什么不?具有负哈希码是完全有效的。提出哈希码的大多数方法自然都以负值结尾,处理它们的任何事情都应考虑到这一点。但是,我会考虑采用另一种方法来计算您的哈希码,例如 目前尚不清楚这些表达式的类型是什么,但是我猜想您最终将要使用字符串的哈希

  • 在这个代码中,-20应该是最小值,因为它是负数,并且离零最远,正确吗?但当我运行MinAlgoritm时,会打印出整数5。我有一个最大版本的这个可以很好地工作,但这个不行。这怎么可能?我能做些什么改进吗?

  • 问题内容: -1 / 5整数除法应该返回什么?我对此行为完全感到困惑。我认为数学上应该为0,但是python和ruby返回-1。 为什么不同的语言在这里表现不同?请有人解释。谢谢。 问题答案: 简短的答案: 语言设计者可以选择在进行整数除法时,其语言是四舍五入为零,负无穷大还是正无穷大。不同的语言做出了不同的选择。 长答案: Python和Ruby的语言作者都认为向负无穷大舍入比向零四舍五入更有意