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;
}
View Code

 

posted on 2016-08-04 15:31  不忧尘世不忧心  阅读(148)  评论(0编辑  收藏  举报