现在的位置: 首页 > 综合 > 正文

poj3982

2012年11月13日 ⁄ 综合 ⁄ 共 919字 ⁄ 字号 评论关闭

许久没有做acm,现在重头开始学啊

大数摸加,练手

#include <stdio.h>
#include <string.h>
#include <math.h>
#define MAXN 100
#define digit(a) (a-'0')
bool Read(int num[])
{
    char str[MAXN];
    if(scanf("%s",str)==EOF)
        return false;
    num[0]=strlen(str)/4+(strlen(str)%4?1:0);
    int i=strlen(str),j=0;
    while(++j,i)
        for(int k=0;k<4&&i;++k,--i)
            num[j]+=digit(str[i-1])*(int)pow(10.0,k);
    return true;
}
void Write(int num[])
{
    printf("%d",num[num[0]]);
    for(int i=num[0]-1;i>0;--i)
        printf("%04d",num[i]);
    printf("\n");
}
void Add(int num1[],int num2[],int num3[])
{
    int len=(num1[0]>num2[0]?num1[0]:num2[0]);
    num3[0]=len;
    for(int i=1;i<=len;++i)
    {
        num3[i]+=(num2[i]+num1[i]);
        num3[i+1]=num3[i]/10000;
        num3[i]%=10000;
    }
    if(num3[num3[0]+1]>0) ++num3[0];
}
int main()
{
    int num[100][100];
    int tmp[100];
    memset(num,0,sizeof(num));
    while(Read(num[0]))
    {
        Read(num[1]);
        Read(num[2]);
        for(int i=3;i<=99;++i)
        {
            memset(tmp,0,sizeof(tmp));
            Add(num[i-3],num[i-2],tmp);
            Add(num[i-1],tmp,num[i]);
        }
        Write(num[99]);
        memset(num,0,sizeof(num));
    }
    return 0;
}

  

抱歉!评论已关闭.