表示已经很久没有自己去从思路的修改自己写的题目了‘
有两处小错误要注意
第一是输入时0 0 0的情况
第二是因为有进位的直接赋值,需要在计算时加上他本身原有的值
’
M - 序列 Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu Submit StatusDescription
数列A满足An = An-1 + An-2 + An-3, n >= 3 编写程序,给定A0, A1 和 A2, 计算A99Input
输入包含多行数据 每行数据包含3个整数A0, A1, A2 (0 <= A0, A1, A2 <= 32767) 数据以EOF结束Output
对于输入的每一行输出A99的值Sample Input
1 1 1Sample Output
69087442470169316923566147 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 #include <iostream> #include <cstdio> #include <cstring> using namespace std; int main() { int x,y,z,j,i,k,carry; int a[100][1000]; while((scanf("%d %d %d",&x,&y,&z))!=EOF) { memset(a,0,sizeof(a)); if(x==0&&y==0&&z==0) { printf("0\n"); continue; } i=0; while(x||y||z) { a[0][i]=x%10; a[1][i]=y%10; a[2][i]=z%10; x=x/10; y=y/10; z=z/10; i++; //此时i为长度 } for(j=3;j<=99;j++) { carry=0; for(k=0;k<i;k++) { a[j][k]+=a[j-1][k]+a[j-2][k]+a[j-3][k]+carry; carry=a[j][k]/10; a[j][k]%=10; } if(carry!=0) { i++; a[j][i-1]+=carry; } } for(i--;i>=0;i--) { printf("%d",a[99][i]); } printf("\n"); } return 0; }