【发布时间】:2015-08-18 07:57:50
【问题描述】:
我正在编写一个基本程序,它接受一个参数,然后根据该参数计算奇数的乘积。
如果我传递从 1 到 19 的任何值,但在 20 时我的输出是负数,而在 35 时它是 0??
我确定算法有问题?
建议:
import java.util.ArrayList;
import java.util.List;
public class ProductOfIntegers {
public static void productOfOddIntegers(int i){
int[] numbers = new int[i];
for(int j = 0; j < numbers.length; j++){
numbers[j] = j + 1;
}
List<Integer> oddNumbers = new ArrayList<Integer>();
for(int j = 0; j < numbers.length; j++){
if(numbers[j] % 2 != 0){
oddNumbers.add(numbers[j]);
}
}
int product = 1;
for(int n: oddNumbers)
product*=n;
System.out.println(oddNumbers);
System.out.println(product);
}
public static void main(String [] args){
productOfOddIntegers(15);
}
}
【问题讨论】:
-
不是你的问题的答案,但
if(numbers[j] % 2 == 0)得到偶数。 -
int 的最大值是多少? 1 * 3 * ... * 21 的值是多少?
-
@Evan Frisch - 感谢您指出这一点。我总是把那些搞混了!在编辑中修复它。
-
使用 long 或 BigInteger。顺便说一句,不需要存储所有数字,只需遍历奇数并根据需要相乘
-
@JB Nizet 如果我超过最大值,为什么它会在输出中变为负数?
标签: java arrays conditional-statements