该方法通过用户的输入获取给定数据集中的两个最大整数,并计算它们的乘积。它对每个输入都很有效,直到我尝试了两个整数100000
和90000
的数组,它返回410065408
。
这是我的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*90000
是9000000000
。int
的最大正值为2^31-1,即2147483647
(略小于9000000000
的四分之一)。
如果需要这两个数字的乘积,则需要使用long
。
100000L * 90000L = 9000000000L = 0x218711a00L
对于32位数据类型,32位(8个十六进制数字)以外的任何数据都会因为溢出而被截断。因此保留的值为:0x18711A00
==410065408
我解决了一个编程问题,如果有两个数字A和B,我必须在乘积的二进制形式中找到1的个数。A和B的范围是[0,10^9]包括在内。这是我写的代码。 这对输入(3,4)很有效,但当我尝试(323294746475)作为输入时,代码不起作用,结果显示0作为答案。我在不同的地方放了几个输出语句进行调试,发现有了这个输入,乘法的结果是-1170032381(这是错误的),因此while循环的条件失败。所以,我像
想象我们有两个数组: 获取包含两者相乘值的第三个String数组的更好方法是什么?比如: 我知道,我可以使用循环并将1中的每个元素与2中的每个元素连接起来,并将结果放入3中。但实际上和中的元素要多得多。Java中是否有专门的工具使其更有效?
有人请解释一下。为什么下面的程序产生16个?
看看以下片段: 结果如下: 无符号短常量
我有一个PySpark数据帧,df1,看起来像: 我有第二个PySpark数据帧,df2 我想将df1的所有列(我有两列以上)与客户ID上的df2连接值相乘
输出如下:http://imgur.com/a/nu3n6