X-man

导航

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

 

posted on 2013-05-30 09:17  雨钝风轻  阅读(261)  评论(0编辑  收藏  举报