某种序列
时间限制: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
- 来源
- 水题比赛中较不水的
- 上传者
- hzyqazasdf
分析:sum=a+b+c;a=b;b=c;c=sum;
#include <stdio.h> #include <string.h> #define MAX 1010 int a[MAX],b[MAX],c[MAX],sum[MAX]; void init(int x,int *a) { int i=0; while(x) { a[i++]=x%10; x/=10; } } int main() { int aa,bb,cc; while(scanf("%d %d %d",&aa,&bb,&cc)!=EOF) { int i,j,t; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); init(aa,a);init(bb,b);init(cc,c); /*if(aa==0&&bb==0&&cc==0) { printf("0 "); continue; }*/ //for(i=0;i<10;i++) //printf("%d %d %d ",a[i],b[i],c[i]); for(i=3;i<=99;i++) { memset(sum,0,sizeof(sum)); for(j=0;j<MAX;j++) { sum[j]+=(a[j]+b[j]+c[j]); if(sum[j]>9) { t=sum[j]; sum[j]=t%10; sum[j+1]=t/10; } } for(j=0;j<MAX;j++) { a[j]=b[j]; b[j]=c[j]; c[j]=sum[j]; } } for(j=MAX-1;j>0&&sum[j]==0;j--); for(;j>=0;j--) printf("%d",sum[j]); printf(" "); } return 0; } //ac
//大数问题