数列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<iostream>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define CLR(arr, val) memset(arr, val, sizeof(arr))
using namespace std;
int a[80], b[80], c[80], res[80];
int main()
{
//freopen("Input.txt", "r", stdin);
string x, y, z;
int i, j, up;
while(cin>>x>>y>>z)
{
CLR(a,0);CLR(b, 0);CLR(c, 0);CLR(res, 0);
for(i = 0, j = x.length() - 1; j >= 0; ++i, --j) //倒序存数,方便进位
a[i] = x[j] - '0';
for(i = 0, j = y.length() - 1; j >= 0; ++i, --j)
b[i] = y[j] - '0';
for(i = 0, j = z.length() - 1; j >= 0; ++i, --j)
c[i] = z[j] - '0';
for(i = 0; i <= 96; ++i)
{
up = 0;
for(j = 0; j < 80; ++j)
{
res[j] = a[j] + b[j] + c[j] + up;
up = res[j] / 10;
res[j] %= 10;
}
for(j = 0; j < 80; ++j) //向后更新递推公式
{
a[j] = b[j];
b[j] = c[j];
c[j] = res[j];
}
}
for(i = 79; i >= 0; --i) //去掉前导的0
if(res[i]) break;
if(i == -1) {printf("0\n"); continue;}
for(j = i; j >= 0; --j)
printf("%d", res[j]);
printf("\n");
}
return 0;
}