-1

関数内で ↑ であり、ここで見つけることができるクヌースの矢印表記を計算するのに問題があります。私がこれまでに作ったものは次のとおりです。

int arrowCount = (int)arrowNum.Value; // Part of
BigInteger a = (int)aNum.Value;       // the input I
BigInteger b = (int)bNum.Value;       // already have
BigInteger result = a;
BigInteger temp = a;
for(int i = 0; i < arrowCount; i++)
{
    result = Power(temp, b);
    temp = r;
    b = a;
}

力を持って

BigInteger Power(BigInteger Base, BigInteger Pow)
    {
        BigInteger x = Base;
        for(int i = 0; i < (Pow-1); i++)
        {
            x *= Base;
        }
        return x;
    }

しかし、それは値が正しくなく、修正する方法がわかりません。3↑3 (つまり3^3 = 9 ) のような 1 つの矢印の問題を処理できますが、それ以上の矢印を処理することはできません。

3↑↑3など、より多くの矢印を把握する方法が必要です。

これは7625597484987 (3^27)で、19683 (27^3)になります。適切な出力を取得する方法を理解して、何が間違っているのかを説明していただければ幸いです。

4

3 に答える 3

2

私はそれをJavaで書き、入力パラメータにdoubleを使用しました:

    private static double knuthArrowMath(double a, double b, int arrowNum)
{
    if( arrowNum == 1)
        return Math.pow(a, b);
    double result = a;
    for (int i = 0; i < b - 1; i++)
    {
        result = knuthArrowMath(a, result, arrowNum - 1);
    }
    return result;
}
于 2016-06-24T05:59:18.990 に答える