3

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;
4

2 に答える 2

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

于 2012-04-23T02:24:18.040 に答える
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));
于 2012-04-23T02:23:25.827 に答える