某种序列
时间限制: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<stdlib.h>
#include<string.h>
#define M 50
char a[M],b[M],c[M],d[M];
void reset()
{
memset(a,'0',M);
memset(b,'0',M);
memset(c,'0',M);
memset(d,'0',M);
}
void StrRev(char *tmp)
{
int len = strlen(tmp);
int l = len / 2;
char t;
for(int i=0;i<l;i++)
{
t = tmp[i];
tmp[i] = tmp[len-i-1];
tmp[len-i-1] = t;
}
tmp[len] = '0';
}
void add()
{
int n=0,sum;
for(int i=3;i<100;i++)
{
for(int j=0;j<M;j++)
{
sum = (a[j]-'0') + (b[j]-'0')+ (c[j]-'0') + n;
n = sum / 10;
sum = sum % 10;
d[j] = sum + '0';
}
strcpy(a,b);
strcpy(b,c);
strcpy(c,d);
}
}
int main()
{
int al,bl,cl,i;
reset();
while(scanf("%s%s%s",a,b,c)!=EOF)
{
/*strrev(a);
strrev(b);
strrev(c);
al = strlen(a);
bl = strlen(b);
cl = strlen(c);
a[al] = '0';
b[bl] = '0';
c[cl] = '0';*/
StrRev(a);
StrRev(b);
StrRev(c);
add();
for(i=M-1;i>=0;i--)
if(d[i] != '0')
break;
if(i < 0)
printf("0\n");
else
{
for(;i>=0;i--)
printf("%c",d[i]);
printf("\n");
}
reset();
}
return 0;
}