C#中第94个斐波那契数的错误
c#
我正在用 C# 计算斐波那契数,但自从数字 94 以来我得到了错误的数字。
这是我的代码。
static void Main(string[] args)
{
string N = Console.ReadLine();
ulong n = ulong.Parse(N);
ulong[] fibonacci = new ulong[n+1];
fibonacci[0] = 0;
if (n == 1)
{
fibonacci[1] = 1;
}
if (n>=2)
{
fibonacci[1] = 1;
for (ulong i = 2; i < n+1; i++)
{
fibonacci[i] = (ulong)fibonacci[i-1] + (ulong)fibonacci[i-2];
}
}
}
Console.WriteLine(fibonacci[n]);
我一直到第 93 个号码 12200160415121876738 为止,但我在第 94 个号码时得到 1293530146158671551,真正的号码是 19740274219868223167。
我不知道我的代码有什么问题。
回答
我认为您不需要在ulong类型中存储N的数量!它也可以存储为int!最重要的部分是存储第N个斐波那契数的值。您可以更简洁地计算它,而无需考虑构建最后一个数字的大数组!
public static void Main(string[] args)
{
string N = Console.ReadLine();
int n = int.Parse(N);
BigInteger[] fibonacci = new BigInteger[3];
fibonacci[0] = 0;
fibonacci[1] = 1;
fibonacci[2] = 1;
if (n>=3)
{
for (int i = 3; i < n+1; i++)
{
fibonacci[0]=fibonacci[1];
fibonacci[1]=fibonacci[2];
fibonacci[2]=fibonacci[1]+fibonacci[0];
}
}
Console.WriteLine(fibonacci[2]);
}