http://acm.hdu.edu.cn/showproblem.php?pid=1865
分析:递推结果为: 1-1, 2-2, 3-3, 4-5, 5-8, 6-13.......,可以看出这是有规律的(f[i]=f[i-1]+f[i-2](i>=3)),只不过题中要求前200项,所以会超int 以及 Longlong, 只能用字符串解决问题了。。
#include <stdio.h> #include <string.h> #define maxn 300 int str1[maxn][maxn]; int main() { int T, i, j; scanf("%d ",&T); while(T--) { char str[300]; gets(str); int len=strlen(str); str1[0][0]=1; str1[1][0]=2; for(i=2;i<len;i++) { int c=0,k; for(k=0;k<maxn;k++) { int s=str1[i-1][k]+str1[i-2][k]+c; str1[i][k]=s%10; c=s/10; } while(c) { str1[i][k++]=c%10; c/=10; } } for(i=299;i>=0;i--) if(str1[len-1][i]) break; for(j=i;j>=0;j--) printf("%d",str1[len-1][j]); printf("\n"); } return 0; }