许久没有做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; }