一、题目
相信小伙伴们都学过斐波那契数列,它是这样一个数列:1,1,3,5,8,13,21…………
用f(n)表示斐波那契数列的第n项,则有:f1=f2=1,fn=fn-1+fn-2(n>2).
输入一个n,求出 fn 对10的9次方+7取模结果。
输入格式:
输入一个整数n(1<=n<=10000)
输出格式:
输出fn对1000000007的值。
二、小技巧和注意事项
1、在解决斐波那契数列问题时,利用数组,我们可以"人为"忽略掉数组下标从0开始,我们定义时,就从下标1开始,跟数列相同
2、因为斐波那契额数列基本呈指数级增长,为了防止数值超过int类型,我们可以边加边取模,结果和最后整个取模是一样的(我称之为取模结合律)
三、源码+注释
#define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; int main() { int mod = 1e9 + 7;//1e9这个指数形式要牢记,e前e后都必须是整型! int f[100005]; int n; cin >> n; f[1] = 1; f[2] = 1; //利用数组表示斐波那契数列的技巧!在解决斐波那契数列问题时,利用数组,我们可以"人为"忽略掉数组下标从0开始,我们定义时,就从下标1开始,跟数列相同 for (int i=3;i<=n;i++) { f[i] = (f[i - 1] + f[i - 2])%mod;//因为斐波那契额数列基本呈指数级增长,为了防止数值超过int类型,我们可以边加边取模,结果和最后整个取模是一样的(我称之为取模结合律) } cout << f[n] << endl; return 0; }