【发布时间】:2022-01-04 20:02:06
【问题描述】:
我刚从 CS50x 的 C 部分毕业,我想尝试在 C 中实现斐波那契数列。我在运行程序后意识到整数溢出了,使用无符号 long long 只会让我到达 F47。有什么办法可以避免溢出吗?我可以用python重新实现,但是我的电脑是个土豆,我宁愿拥有C的快速运行速度。
这是我的code。
编辑:这是我的代码的原始版本:
void fibonacci(long long N, FILE *out)
{
fprintf(out, "0\n1\n");
if (N > 2)
{
for (long long z = 0, i = 0, j = 1, next = 0; z < N - 2; z++)
{
//Next is i + j
next = i + j;
//old j becomes the new i
i = j;
//old next becomes the new j
j = next;
//Print j (the old next)
fprintf(out, "%i\n", j);
}
}
}
该链接现在显示了我的最新版本,由于使用字符而不是整数进行添加,该版本按预期工作。
【问题讨论】:
-
“避免溢出”是指在溢出时给你一个错误并停止,还是神奇地实现不溢出的多精度算术?
-
如果您希望代码在整数溢出时停止,请参阅 stackoverflow.com/questions/199333 或 stackoverflow.com/questions/69104632
-
听起来你没有正确使用
unsigned long long。 64 位应该让你达到第 93 个斐波那契数左右。 -
问题必须是独立的。您必须在问题本身中发布minimal reproducible example,而不是在可能随时腐烂的外部链接中,使问题无效
-
@RP-Lens 我们更喜欢可以在问题中看到的代码。我们希望不必追逐链接来查看您的代码。您为什么要进行编辑以使您的代码退出问题?问题中的代码更好。
标签: c integer fibonacci integer-overflow