#include <stdio.h>
int fibonacci(int n) {
int count, n1 = 0, n2 = 1, fib = 0;
printf("Given number: ");
scanf("%d", &n);
count = 0;
while (count < n) {
fib = n1 + n2;
n1 = n2;
n2 = fib;
++count;
if (n > fib)
printf("%d ", fib);
}
return 0;
}
int main() {
int szam;
fibonacci(szam);
return 0;
}
我已经走了这么远,我只是不知道如何计算数字。
例如:
输入:
10
输出:
1 2 3 5 8
但是应该是:
在:
10
出:
5
最佳答案
代码中的停止条件不正确:计算n
斐波那契数后停止,而不是计算大于n
的斐波那契数时停止。
这是更正的版本:
#include <stdio.h>
int count_fibonacci(unsigned long long int n) {
int count = 0;
unsigned long long n1 = 1, n2 = 1, fib = 1;
while (fib < n) {
count++;
fib = n1 + n2;
n1 = n2;
n2 = fib;
}
return count;
}
int main(void) {
unsigned long long n = 0;
printf("Given number: ");
scanf("%llu", &n);
printf("%d\n", count_fibonacci(n));
return 0;
}
因为您的斐波那契数列为:
5
,所以它会为输入10
打印1 2 3 5 8...
。但是标准序列通常定义为
1 1 2 3 5 8...
,并且应返回6
。您可以通过将初始状态更改为n1 = 0, n2 = 1, fib = 1
来获得此行为。关于c - 斐波那契数的数量小于给定的n,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35730930/