题目给的信息很明确,Fibonacci数的规律就是后一个数等于它前面两个数加和,即f(n)=f(n-1)+f(n-1),本题只有一个考点:就是卡数字规模。常规的代码能解决绝大部分数字,但题目给的是:1000000,一百万的规模,让我最开始的代码直接爆了,这题还有定义数组不太好用,int太小,long int和unsigned int定义的数组无法让我过自检,出不了答案,那我们就不用数组,直接上变量。还有题目提示说了,可以不用求出两数之和,直接求取余的结果会简化代码。OK,上代码:
#include<stdio.h>
int main()
{
long long int n, i;
long long int a, b, num = 0;
scanf("%lld", &n);
if(n == 1 || n == 2)
{
printf("1\n");
}
else if(n > 2)
{
a = b = 1;
for(i = 3; i <= n; i++)
{
num = (a + b) % 10007;
a = b;
b = num;
}
printf("%lld\n", num);
}
return 0;
}
这题给我的启发是一条路走不通就换,而且往往越简便的代码越有效。