序列
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 8289 | Accepted: 3752 |
Description
数列A满足An = An-1 + An-2 + An-3, n >= 3
编写程序,给定A0, A1 和 A2, 计算A99
编写程序,给定A0, A1 和 A2, 计算A99
Input
输入包含多行数据
每行数据包含3个整数A0, A1, A2 (0 <= A0, A1, A2 <= 32767)
数据以EOF结束
每行数据包含3个整数A0, A1, A2 (0 <= A0, A1, A2 <= 32767)
数据以EOF结束
Output
对于输入的每一行输出A99的值
Sample Input
1 1 1
Sample Output
69087442470169316923566147
vector模拟大数加法,写完觉得用vecto模拟确实r比较麻烦
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#include <stack>
#include <map>
#include <cmath>
#include <vector>
#define max_ 100010
#define inf 0x3f3f3f3f
#define ll long long
using namespace std;
vector<int>v[4],tmp[4];
int main(int argc, char const *argv[]) {
int a,b,c;
while(cin>>a>>b>>c)
{
for(int i=0;i<=3;i++)
{
v[i].clear();
tmp[i].clear();
}
do
{
v[0].push_back(a%10);
a/=10;
}while(a!=0);
do
{
v[1].push_back(b%10);
b/=10;
}while(b!=0);
do
{
v[2].push_back(c%10);
c/=10;
}while(c!=0);
int t=97;
tmp[1]=v[0];
tmp[2]=v[1];
tmp[3]=v[2];
while(t--)
{
v[0]=tmp[1];
v[1]=tmp[2];
v[2]=tmp[3];
if(v[0].size()>v[1].size())
v[0].swap(v[1]);
if(v[0].size()>v[2].size())
v[0].swap(v[2]);
if(v[1].size()>v[2].size())
v[1].swap(v[2]);
int l=v[0].size();
int cf=0,i;
for(i=0;i<l;i++)
{
int d=v[0][i]+v[1][i]+v[2][i]+cf;
v[3].push_back(d%10);
cf=d/10;
}
l=v[1].size();
for(;i<l;i++)
{
int d=v[1][i]+v[2][i]+cf;
v[3].push_back(d%10);
cf=d/10;
}
l=v[2].size();
for(;i<l;i++)
{
int d=v[2][i]+cf;
v[3].push_back(d%10);
cf=d/10;
}
while(cf!=0)
{
v[3].push_back(cf%10);
cf/=10;
}
tmp[1]=tmp[2];
tmp[2]=tmp[3];
tmp[3]=v[3];
v[3].clear();
}
for(int i=tmp[3].size()-1;i>=0;i--)
printf("%d",tmp[3][i]);
printf("\n");
}
return 0;
}