您的位置:首页 > 其它

nyoj 某种序列 114 (大数&&滚动数组) 好题

2015-11-10 20:54 239 查看

某种序列

时间限制: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>
#include<algorithm>
using namespace std;
#define N 110
int a
;
int b
;
int c
;
int sum
;
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);
for(i=3;i<=99;i++)
{
memset(sum,0,sizeof(sum));
for(j=0;j<N;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<N;j++)//分别更新三个数的值(全都加 1,如 1,2,3变成2,3,4)
{
a[j]=b[j];
b[j]=c[j];
c[j]=sum[j];
}
}
for(j=N-1;j>0&&sum[j]==0;j--);//去掉前面的0。
for(;j>=0;j--)
printf("%d",sum[j]);
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: