http://acm.nyist.net/JudgeOnline/problem.php?pid=114
某种序列
时间限制:
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
-
-
#include<stdio.h> #include<string.h> #define NUM 110 #define MAX 1000 int a[NUM][MAX]; int main() { int i,j,k,n; char s_1[20],s_2[20],s_3[20]; while(~scanf("%s %s %s",s_1,s_2,s_3)) { for(i=0;i<NUM;i++) memset(a[i],0,sizeof(a[i])); n=strlen(s_1); for(j=0,i=n-1;i>=0;i--,j++) a[0][j]=s_1[i]-'0'; n=strlen(s_2); for(j=0,i=n-1;i>=0;i--,j++) a[1][j]=s_2[i]-'0'; n=strlen(s_3); for(j=0,i=n-1;i>=0;i--,j++) a[2][j]=s_3[i]-'0'; for(i=3;i<NUM;i++) { for(j=0;j<MAX;j++) { a[i][j]+=(a[i-1][j]+a[i-2][j]+a[i-3][j]); if(a[i][j]>=10) { k=a[i][j]; a[i][j]=k%10; a[i][j+1]=k/10; } //if(i<=10&&a[i][j]!=0) //printf("%d",a[i][j]); } //if(i<=10) //printf("\n"); } for(i=MAX-1;i>0;i--) if(a[99][i]!=0) break; for(;i>=0;i--) printf("%d",a[99][i]); printf("\n"); } return 0; }
-
输入包含多行数据