C 语言函数,返回大斐波那契数的无符号类型(如 89 元素)

问题描述 投票:0回答:1

我是 C 新手,但做了一些练习,所以这个练习如下

要求:

  • 编写一个返回类型无符号且参数无符号的函数(必须使用此类型) -需要能够获取(返回)第 n 个斐波那契数,例如 89 元素(如果前 3 个元素是 0、1、1,则 89 元素是 1,100,087,778,366,100,000)。

问题:

  • 看到一些使用“unsigned long long”的答案,但要求不允许使用该类型。也不能使用外部库石灰 GMP

需要帮助我能做什么?

代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

unsigned Fibonacci(unsigned numElement);

int main()
{
    unsigned element;
    element = Fibonacci(89);
    printf("%d\n",element);

    return 0;
}

unsigned Fibonacci(unsigned numElement){

    int fibonacciArr[100] = {0, 1};
    int i;

    for(i = 2; i < numElement; i++ ){
                fibonacciArr[i] = fibonacciArr[i-1] + fibonacciArr[i-2];
    }

    return fibonacciArr[numElement -1];
}

获取输出:-2092787285(我知道超出了无符号整数的范围,所以是负数,但不知道如何解决这个问题) 而不是预期的输出:1100087778366100000

-尝试使用“unsinged long long”但不符合运动要求

c fibonacci unsigned
1个回答
0
投票

这些要求正如你所理解的那样是根本不可能的,因为正如你所说,正确的结果对于 32 位无符号整数来说太大了。

有两种方法可以解释给您的任务:

  1. 无符号字面意思并不是“无符号整型”,它只是意味着“无符号整数类型”,因此“无符号长整型”是允许的。
  2. 使用“无符号”,然后声称您的答案仅适用于标准允许的“无符号”为 128 位的 C 实现。坚持你的答案是正确的 C 程序,即使没有编译器可以正确编译它。
  3. 89 是一般斐波那契数的示例,而不是函数的示例输入,并且 89 失败是可以接受的。
© www.soinside.com 2019 - 2024. All rights reserved.