c - 打印从第 93 个值向上的斐波那契数时,我得到的值不正确

标签 c

#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 小时将是一个有趣的挑战,那么我将在这里发布一个简单的程序。

关于c - 打印从第 93 个值向上的斐波那契数时,我得到的值不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46027984/

相关文章:

c - malloc函数返回的内存不保存数据

c - R*-Tree C 实现?

c - 在C代码中打印底部带有*的倒三角形

c - free() 在 char 数组上崩溃,但前提是该数组恰好包含 7 个元素

c - 如何将二进制 int 数组转换为十六进制 char 数组?

c - 如何替换文件中的一行?

c - #ifdef _CH_ 预处理器指令在 C 中的作用是什么?

c - 为什么 ret 会随着优化而消失?

c - C 的 rand() 必须是随机的吗?

C无限循环与链表