一、题目
相信小伙伴们都学过斐波那契数列,它是这样一个数列: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;
}