模拟_大数(HDU_1715)

#include <stdio.h>
#include <string.h>

#define M 1002

char map[M][220] = {"0","1","1"};

void add(char *aStr, char *bStr, char *cStr)//aStr + bStr = cStr
{
    int ai = strlen(aStr)-1,bi = strlen(bStr)-1,ci = 0;
    int all,over = 0;
    
    for(; ai>=0 || bi>=0; ai--,bi--)
    {
        all = (ai>=0 ? aStr[ai]-'0' : 0) + (bi>=0 ? bStr[bi]-'0' : 0) + over;
        cStr[ci++] = all % 10 + '0';
        over = all / 10;
    }
    if(over > 0)    cStr[ci++] = over + '0';
    cStr[ci] = '';
    strrev(cStr);
}

void init()
{
    for(int i=3; i<M; i++)
    {
        add(map[i-2],map[i-1],map[i]);
    }
}

int main(int argc, char* argv[])
{
#ifdef __MYLOCAL
    freopen("in.txt","r",stdin);
#endif
    
    init();
    int t,n;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        printf("%s
",map[n]);
    }
    
    return 0;
}
原文地址:https://www.cnblogs.com/lk1993/p/3254967.html