#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>
int fibonacciSum(int n);
int main(void) {
int n = 0;
scanf("%d", &n);
printf("%d", fibonacciSum(n));
}
int fibonacciSum(int n) {
if (n <= 1)
return n;
uintmax_t previous = 0;
uintmax_t current = 1;
for (int i = 0; i < n - 1; i++) {
printf("%ju and i %d\n", current, i);
uintmax_t tmp_previous = previous;
previous = current;
current = tmp_previous + current;
}
return current % 10;
}
该程序计算第n个斐波那契数,以及第n个斐波那契数的最后一位。就我而言,由于我在第92个元素之后输入了错误的值,因此最后一位也出了错。我正在使用jdoodle在线应用程序来编译我的C程序。怎么了
最佳答案
如果您只对斐波纳契数的最后一位感兴趣,请对模进行10模运算:
#include <stdio.h>
int fibonacciSum(int n);
int main(void) {
int n = 0;
if (scanf("%d", &n) == 1) {
printf("%d\n", fibonacciSum(n));
}
return 0;
}
int fibonacciSum(int n) {
if (n <= 1)
return n;
int previous = 0;
int current = 1;
for (int i = 1; i < n; i++) {
printf("fib(%d) % 10 = %d\n", i, current);
int tmp_previous = previous;
previous = current;
current = (tmp_previous + current) % 10;
}
return current;
}
如果还需要完整的数字,则应使用多精度软件包(也称为bignum),因为斐波那契数字从93开始超过64位。
您可以编写一个简单的数字来仅处理正数的加法,将其存储为分配的十进制数字字符串。接下来的24小时是一个有趣的挑战,我将在此处发布一个简单的程序。