斐波那契数列:数列的第一个值和第二个值都为1,接下来每个数都等于前两个数的和。求第n个数是多少? 输入描述 一个整数n,表示要求的第n位。(1<n<90) 输出描述 一个整数,第n位的数字

描述
斐波那契数列:数列的第一个值和第二个值都为1,接下来每个数都等于前两个数的和。求第n个数是多少?
输入描述
一个整数n,表示要求的第n位。(1<n<90)
输出描述
一个整数,第n位的数字。
用例输入 1 
20
用例输出 1 
6765

代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int a[n+2];
    a[1]=1;
    a[2]=1;
    for(int i=3;i<=n;i++) a[i]=a[i-1]+a[i-2];
    cout<<a[n]<<endl; 
}

要开 long long 和记忆化,不然会出错。

#include<bits/stdc++.h>
using namespace std;
#define int long long
int Fib[103];
int fib(int num){
    if(Fib[num]) return Fib[num];
    if(num == 1){
        return 1;
    }
    if(num == 2){
        return 1;
    }
    return Fib[num] = fib(num - 1) + fib(num - 2);
}
int n;
signed main(){
    cin >> n;
    cout << fib(n) << endl;;
    return 0;
}

#include <iostream>
using namespace std;

long long getFibonacciNumber(int n) {
    if (n <= 0 || n >= 90) {
        throw invalid_argument("n必须在1和89之间。");
    }

    long long first = 1;
    long long second = 1;

    for (int i = 3; i <= n; ++i) {
        long long next = first + second;
        first = second;
        second = next;
    }

    return second;
}

int main() {
    int n;
    cout << "请输入n的值(1 < n < 90): ";
    cin >> n;

    try {
        long long result = getFibonacciNumber(n);
        cout << "第" << n << "个斐波那契数列的值为:" << result << endl;
    } catch (const exception& ex) {
        cout << "错误: " << ex.what() << endl;
    }

    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7625006
  • 这篇博客也不错, 你可以看下问题描述 已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。 输入格式 输入一个正整数N。 输出格式 输出一个整数,表示你找到的最小公倍数。 样例输入 9 样例输出 5
  • 除此之外, 这篇博客: 4位数的超级素数中的 编程找出所有的4位超级素数,每行输出6个数,两个数之间空格分格;超级素数:一个N位超级素数是指一个N位正整数,它的前1位,前2位,…前N位均为素数,例如,2333是个4位的超级素数,因为2,23,233,2333均为素数。 部分也许能够解决你的问题。
  • 以下回答由chatgpt基于相关博客总结生成:

    解决方案如下:

    首先,我们可以使用递归方法来实现斐波那契数列。递归方法的思路是,第n位的数等于第n-1位和n-2位的数之和。

    下面是用Python语言实现递归方法的代码:

    def fibonacci(n):
        if n <= 0:
            return ValueError("n must be a positive integer")
        if n == 1 or n == 2:
            return 1
        else:
            return fibonacci(n-1) + fibonacci(n-2)
    
    n = int(input("请输入要求的第n位:"))
    result = fibonacci(n)
    print(f"第{n}位的数是:{result}")
    

    这个方法的时间复杂度是O(2^n),效率比较低。所以我们可以采用动态规划的方法,使用一个数组来保存已经计算过的数值,以避免重复计算。

    下面是用Python语言实现动态规划方法的代码:

    def fibonacci(n):
        if n <= 0:
            return ValueError("n must be a positive integer")
        if n == 1 or n == 2:
            return 1
        else:
            dp = [0] * n
            dp[0] = 1
            dp[1] = 1
            for i in range(2, n):
                dp[i] = dp[i-1] + dp[i-2]
            return dp[n-1]
    
    n = int(input("请输入要求的第n位:"))
    result = fibonacci(n)
    print(f"第{n}位的数是:{result}")
    

    这个方法的时间复杂度是O(n),比递归方法效率要高。

    如果n比较大(大于90),斐波那契数的计算可能会溢出整数范围。这时可以使用浮点数或者使用Python的大整数库来存储数值。大整数库可以使用int类型的bit_length()方法来判断整数的位数,进而判断是否会溢出。

    以上是我给出的解决方案,请测试并查看是否满足需求。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^