某种序列
时间限制:3000 ms | 内存限制:65535 KB
难度:4
- 描述
- 数列A满足An = An-1 + An-2 + An-3, n >= 3
编写程序,给定A0, A1 和 A2, 计算A99- 输入
- 输入包含多行数据
每行数据包含3个整数A0, A1, A2 (0 <= A0, A1, A2 <= 100000000)
数据以EOF结束 - 输出
- 对于输入的每一行输出A99的值
- 样例输入
-
1 1 1
- 样例输出
-
69087442470169316923566147
1 #include<stdio.h> 2 #include<string.h> 3 int a[40],b[40],c[40]; 4 5 void add(int *a,int *b,int *c) 6 { 7 int i; 8 for(i=0;i<40;++i) 9 { 10 a[i]=a[i]+b[i]+c[i]; 11 a[i+1]+=a[i]/10; 12 a[i]=a[i]%10; 13 } 14 } 15 int main() 16 { 17 int A,B,C,i; 18 while(scanf("%d%d%d",&A,&B,&C)!=EOF) 19 { 20 i=0; 21 memset(a,0,sizeof(a)); 22 memset(b,0,sizeof(b)); 23 memset(c,0,sizeof(c)); 24 while(A||B||C) 25 { 26 a[i]=A%10; 27 A/=10; 28 b[i]=B%10; 29 B/=10; 30 c[i]=C%10; 31 C/=10; 32 ++i; 33 } 34 for(i=3;i<99;i+=3) 35 { 36 add(a,b,c); 37 add(b,a,c); 38 add(c,a,b); 39 } 40 add(a,b,c); 41 i=39; 42 while(i>0&&a[i]==0) 43 --i; 44 if(i==0)//注意输入三个0的情况 45 { 46 printf("%d\n",a[0]); 47 continue; 48 } 49 for(;i>=0;--i) 50 printf("%d",a[i]); 51 printf("\n"); 52 } 53 return 0; 54 }