poj3982
许久没有做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;
}
浙公网安备 33010602011771号