#include <stdio.h>
#include <math.h>
int fib();
int scan;
int main() {
scanf("%d", &scan);
printf("%d\n", fib());
scanf("%s");
return 0;
}
int fib() {
return floor((pow(1+sqrt(5)/2, scan)-(-pow(1-sqrt(5)/2, scan)))/sqrt(5));
}
我很擅长用C编程,并决定尝试计算Fibonacci系列中的任何数字。我的基础是我的lua脚本here。我不知道自己做错了什么,有人可以给我一些见解吗?
答案 0 :(得分:2)
你的公式错了。你想要fib:
int fib() {
return round((pow((1+sqrt(5))/2, scan)-(-pow((1-sqrt(5))/2, scan)))/sqrt(5));
}
代替。您在1+sqrt(5)
和1-sqrt(5)
条款周围缺少括号,并且使用的是地板而不是圆形,这低估了我的测试中的斐波那契数字。 (这主要与pow
函数的低精度有关。第七个斐波纳契数,13,出现在12.969)
你也可能想要改变
scanf("%s");
到
char tmp;
scanf("%c", &tmp);
由于你的方式错误地省略了一个参数。
希望这有帮助!