hdu 1715 大菲波数

#include<stdio.h>

#include<vector>

using namespace std;

#define N 1010

vector<int>a[N];

int fb()

{

    int i,j,k;

    int jw;

    a[1].push_back(1);

    a[2].push_back(1);

    for(i=3;i<N;i++)

    {

        jw=0;

        for(j=0,k=0;k<a[i-2].size();j++,k++)

        {

            //a[i][j]+=jw;

            int t=a[i-1][j]+a[i-2][k]+jw;

            jw=t/10;

            if(jw)

            a[i].push_back(t%10);

            else

            a[i].push_back(t);

        }

        for(;j<a[i-1].size();j++)

        {

            int t=a[i-1][j]+jw;

            jw=t/10;

            if(jw)

            a[i].push_back(t%10);

            else

            a[i].push_back(t);

        }

        if(jw)

        {

            a[i].push_back(jw);

        }

    }

    return 0;

}

int main()

{

    int _case,n;

    fb();

    scanf("%d",&_case);

    while(_case--)

    {

        scanf("%d",&n);

        for(int i=a[n].size()-1;i>=0;i--)

        printf("%d",a[n][i]);

        printf("\n");

    }

    return 0;

}

学习:

      STL中vector使用下标访问数组元素是,只能访问到vector动态申请过的空间:

      使用char型数组时,注意‘\0’的ASCⅡ码为0,即数组的读入结束符;

错误代码:

#include<stdio.h>

#include<string.h>

#define N 50

char a[N][1000];

int fb()

{

    int i,j,k;

    int jw;

    a[1][0]=1;

    a[2][0]=1;

    for(i=3;i<N;i++)

    {

        jw=0;

        for(j=0,k=0;k<strlen(a[i-2]);j++,k++)

        {

            //a[i][j]+=jw;

            a[i][j]=a[i-1][j]+a[i-2][k]+jw;

            jw=a[i][j]/10;

            if(jw)

            {

                a[i][j]%=10;

            }

            printf("%d ",a[i][j]);

        }

        for(;j<strlen(a[i-1]);j++)

        {

            a[i][j]=a[i-1][j]+jw;

            jw=a[i][j]/10;

            if(jw)

            {

                a[i][j]%=10;

            }

        }

        if(jw)

        {

            a[i][j++]=jw;

        }

        for(int k=strlen(a[i])-1;k>=0;k--)

        printf("#%d",a[i][k]);

        printf("\n");

    }

    return 0;

}

int main()

{

    int _case,n;

    fb();

    scanf("%d",&_case);

    while(_case--)

    {

        scanf("%d",&n);

        for(int i=strlen(a[n])-1;i>=0;i--)

        printf("%d",a[n][i]);

        printf("\n");

    }

    return 0;

}
View Code

 

你可能感兴趣的:(HDU)