Java 8 LongStream Java—如何避免负回报?

Java 8 LongStream Java—如何避免负回报?,java-8,stack-overflow,factorial,Java 8,Stack Overflow,Factorial,当n等于50时,此函数返回一个负数,是否有类似于“BigIntegerStream”的LongStream的替代品,允许“n”更大 public static long factorial(int n) { if (n > 50 || n < 0) throw new IllegalArgumentException(n + " is out of range"); return LongStream.rangeClosed(2, n).reduc

当n等于50时,此函数返回一个负数,是否有类似于“BigIntegerStream”的LongStream的替代品,允许“n”更大

public static long factorial(int n) {

    if (n > 50 || n < 0)
        throw new IllegalArgumentException(n + " is out of range");

    return LongStream.rangeClosed(2, n).reduce(1, (a, b) -> a * b);

}
公共静态长阶乘(int n){
如果(n>50 | | n<0)
抛出新的IllegalArgumentException(n+“超出范围”);
返回LongStream.rangeClosed(2,n).reduce(1,(a,b)->a*b);
}

实际上,您不需要更大的基本容量,相反,您可能希望使用@Tunaki所说的
,但保留原始
IntStream

下面的代码工作得很好

public static void main(String[] args) { 
    System.out.println(factorial(10)); // 3 628 800 => CORRECT
}

public static BigInteger factorial(int n) {
    return IntStream.rangeClosed(2, n)
                    .mapToObj(BigInteger::valueOf)
                    .reduce(BigInteger.ONE, (a, b) -> a.multiply(b));
}

Stream
。我会尝试一下您的方法,但有一个更复杂的问题,我精心设计的解决方案最终会将高值分配给具有大小限制的数组索引:Integer.MAX_值问题出现在阶乘输入高于20时,我的代码甚至需要支持阶乘(5000)-五千。。。我想我用我的算法得到了fckd。。。[Heap Challenge]()@KRonaldoK很难支持阶乘5000,因为使用biginger()时内存有限