0
#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 编程非常陌生,并决定尝试计算斐波那契数列中的任何数字。我在这里基于我的 lua 脚本。我不知道我做错了什么,有人能给我一些见解吗?

4

1 回答 1

2

你公式错了。你希望 fib 是:

int fib() {
    return round((pow((1+sqrt(5))/2, scan)-(-pow((1-sqrt(5))/2, scan)))/sqrt(5));
}

反而。1+sqrt(5)您在and术语周围缺少括号,1-sqrt(5)并且使用的是 floor 而不是 round,这低估了我测试中的斐波那契数。(这主要与pow函数的低精度有关。第七个斐波那契数 13 为 12.969)

你可能也想改变

scanf("%s");

char tmp;
scanf("%c", &tmp);

由于您使用它的方式错误地省略了参数。

希望这可以帮助!

于 2013-11-08T02:16:25.087 回答