用Java中的两个大数字相乘

时间:2016-10-26 04:47:24

标签: java biginteger

public long Fib(int a1, int a2, int i){
    if(i==1){            
        return a1;
    }else if(i==2){            
        return a2;
    }else{
        long l1 = Fib(a1, a2, i-1);
        long l2 = Fib(a1, a2, i-2);

        long val = l2 + (l1*l1);
        return val;
    }
}

我写了这段代码,找到了 t(i + 2)= t(i)+ t(i + 1)^ 2 功能的修改后的斐波那契当我们找到第i个迭代时,t(i)就是答案。 但是当我找到t(10)时,它会给出一个单独的答案。 但我得到了正确的答案直到t(9)。我尝试过BigInteger方法,但它会出错。

1 个答案:

答案 0 :(得分:0)

如果要使用BigInteger,则应稍微修改一下代码。类似的东西:

public class ModifiedFib
{
    static BigInteger Fib(int a1, int a2, int i)
    {
        if (i <= 0)
            return BigInteger.ZERO;
        else if (i == 1)
            return BigInteger.valueOf(a1);
        else if (i == 2)
            return BigInteger.valueOf(a2);
        else
        {
            BigInteger b1 = Fib(a1, a2, i - 1);
            BigInteger b2 = Fib(a1, a2, i - 2);

            return b1.multiply(b1).add(b2);
        }
    }

    public static void main(String[] args)
    {
        for (int i = -1; i <= 11; i++)
            System.out.println("i = " + i + ": " + Fib(0, 1, i));
    }
}

我添加了对i <= 0的检查,并在这种情况下返回ZERO。我不知道你有什么输入,但在main()中,我有一个简单的循环演示函数。

输出:

i = -1: 0
i = 0: 0
i = 1: 0
i = 2: 1
i = 3: 1
i = 4: 2
i = 5: 5
i = 6: 27
i = 7: 734
i = 8: 538783
i = 9: 290287121823
i = 10: 84266613096281243382112
i = 11: 7100862082718357559748563880517486086728702367