我有一个我需要用BigInteger格式编写的等式。它需要处于for循环中。这是我到目前为止所做的,但我不确定如何使用BigInteger。这是写在for循环中的等式:i *(i + 1)*(2 * i + 1)*(3 * i * i + 3 * i-1)/ 30
public static BigInteger[] nthtetranum(int n) //This is the method using the simple formula for tetra number.
{
BigInteger[] nth = new BigInteger[n];
for(int i = 0; i <nth.length; i++)
{
//nth[i] = i*(i+1)*(2*i+1)*(3*i*i+3*i-1)/30;
nth[i] =
}
return nth;
答案 0 :(得分:2)
BigInteger two = new BigInteger("2");
BigInteger three = new BigInteger("3");
BigInteger I = new BigInteger(""+i); // "I" is a bigint version of "i"
nth[i] = I
.multiply(I.add(BigInteger.ONE))
.multiply(I.multiply(two).add(BigInteger.ONE))
.multiply(I.multiply(I).multiply(three).add(I.multiply(three)).subtract(BigInteger.ONE))
.divide(new BigInteger("30"));
这个表达式很难看,但即使i
的“边界”值也不会溢出。
答案 1 :(得分:0)
庵。正常的方式?
nth[i] = BigInteger.valueOf(i)
.multiply(BigInteger.valueOf(i+1))
.multiply(BigInteger.valueOf(2*i + 1))
.multiply(BigInteger.valueOf(3L*i*i + 3*i - 1)) // should fit in a long
.divide(BigInteger.valueOf(30));