java - 将两个大整数值相乘会得到不正确的结果

标签 java

此方法用于获取(通过用户输入)给定数据集中的两个最大整数并计算它们的乘积。它适用于每个输入,直到我尝试使用两个整数数组 10000090000 并返回 41006540​​8

这是我的 Java 方法:

static int getMaxPairwiseProduct(int[] numbers) {
    int max=0,lessermax=0;
    int n = numbers.length;

    for (int j = 0; j < n; ++j) {
        //if(j==k)continue;
        if(numbers[j]>0 && numbers[j]>=max) {               
            lessermax=max;max=numbers[j];
            System.out.println(j);//k=j;
        } else if(numbers[j]>lessermax) {      
            lessermax=numbers[j];
            System.out.println(j);}
        }
    //result=;
    return max*lessermax;
}

这是我的main方法:

public static void main(String[] args) {
    //FastScanner scanner = new FastScanner(System.in);
    Scanner scanner=new Scanner(System.in);
    int n = scanner.nextInt();
    int[] numbers = new int[n];
    for (int i = 0; i < n; i++) {
        numbers[i] = scanner.nextInt();
    }
    scanner.close();
    System.out.println(getMaxPairwiseProduct(numbers));
}

最佳答案

int 的容量已溢出并环绕。 100000 * 900009000000000int 的最大正值是 2^31-1,即2147483647 (略小于 9000000000 的四分之一)。

如果您想要这两个数字的乘积,则需要使用 long相反。

100000L * 90000L = 9000000000L = 0x218711a00L

对于 32 位数据类型,32 位(8 个十六进制数字)之外的任何内容都会因溢出而被截断。所以剩下的值为:0x18711a00 == 410065408

关于java - 将两个大整数值相乘会得到不正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38170989/

相关文章:

java - 如何调试 lombok 对象

java - 从 Activity 的 onCreate 中已运行的服务获取数据

java - 如何使用多值映射

java - 作为cronjob运行时如何处理Java运行时错误

java - 想要在代码中打开 eclipse xml 文件并引用其 IFile 导航到特定行号

java - 写入txt文件时按升序排序

java - Maven UTF-8 编码问题

java - 当我只有一个对象时,我可以调用静态 java 方法吗?

java - 对同一个对象使用两种不同的序列化方法

java - Hibernate 无法正确显示 arraylist 的值