最开始我的代码是下图所示:
#include<stdio.h>
int font(int n){
int a = 1, b = 1, next, i;
for (i = 2; i <= n; i++) {
next = (a + b) % 1000000;
a = b;
b = next;
}
return (n == 1) ? n : next;
}
int main(){
int i,n;
while(scanf("%d",&n)!=EOF){
printf("%d\n",font(n));
}
return 0;
}
但是在OJ上面运行时时间超限,为了使得运行时间减少,我使用数组来记录斐波那契数列,这样就不用,每次输入都要重新计算,直接从数组中找到该值输出。
代码如下:
#include<stdio.h>
int main(){
int i;
int s[100000]={1,2};
for(i=2;i<100000;i++)
if(s[i-1]+s[i-2]<1000000)
s[i]=s[i-1]+s[i-2];
else
s[i]=(s[i-1]+s[i-2])%1000000;
while(scanf("%d",&i)!=EOF)
printf("%d\n",s[i-1]);
return 0;
}