nyoj 某种序列

某种序列

时间限制: 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

思路:
用二位数组来存储大数,如num[0][1]=1代表第一个数只有一位数1.num[2][2]=34代表第三个数是两位数34,num[2][1]=4,num[2][2]=3,

#include <iostream>
#include <cstring>
using namespace std;

int num[100][100];

void init(int i,int t)
{
int j=1;
while(t)
{
num[i][j++]=t%10;
t/=10;
}

//num[i][1]=t;//这样初始化能提交上去。按照上边那种初始化方式提交不上去,但两种初始化的结果都一样。。。。。
}

int main()
{
int a,b,c;
while(cin>>a>>b>>c)
{
if(a==0&&b==0&&c==0)
cout<<'0'<<endl;
else
{
memset(num,0,sizeof(num));
init(0,a);
init(1,b);
init(2,c);

int len=1;
for(int i=3;i<=99;++i)
{
int Carry_on=0;
for(int j=1;j<=len;++j)
{
int temp=num[i-1][j]+num[i-2][j]+num[i-3][j]+Carry_on;
num[i][j]=temp%10;
Carry_on=temp/10;

if(j==len&&Carry_on!=0)
len++;
}
}
for(int i=len;i>0;--i)
cout<<num[99][i];
cout<<endl;
}
}
return 0;
}

转载于:https://www.cnblogs.com/tianzeng/p/8797908.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值