求递推公式(大数序列)

来源:互联网 发布:淘宝网家装日记 编辑:程序博客网 时间:2024/05/20 17:10
描述
数列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) //去掉前导的0if(res[i]) break;if(i == -1) {printf("0\n"); continue;}for(j = i; j >= 0; --j)printf("%d", res[j]);printf("\n");}return 0;}