将两个大整数值相乘会得到错误的结果

时间:2016-07-03 14:37:56

标签: java

此方法用于获取(通过用户输入)给定数据集中的两个最大整数并计算其产品。它适用于每个输入,直到我尝试了两个整数90000410065408的数组,然后返回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; }

这是我的Java方法:

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)); } 方法:

{{1}}

1 个答案:

答案 0 :(得分:4)

它溢出了int的容量并且缠绕着。 100000 * 900009000000000int的最大正值为2 ^ 31-1,即2147483647(略小于9000000000的四分之一。)

如果您需要这两个数字的产品,则需要使用long代替。

100000L * 90000L = 9000000000L = 0x218711a00L

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