POJ:3928 序列

来源:互联网 发布:2017淘宝冷门暴利产品 编辑:程序博客网 时间:2024/05/16 14:44
序列
序列
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 6748 Accepted: 3021

Description

数列A满足An = An-1 + An-2 + An-3, n >= 3

编写程序,给定A0, A1 和 A2, 计算A99

Input

输入包含多行数据

每行数据包含3个整数A0, A1, A2 (0 <= A0, A1, A2 <= 32767)
数据以EOF结束

Output

对于输入的每一行输出A99的值

Sample Input

1 1 1

Sample Output

69087442470169316923566147

Description

数列A满足An = An-1 + An-2 + An-3, n >= 3

编写程序,给定A0, A1 和 A2, 计算A99

Input

输入包含多行数据

每行数据包含3个整数A0, A1, A2 (0 <= A0, A1, A2 <= 32767)
数据以EOF结束

Output

对于输入的每一行输出A99的值

Sample Input

1 1 1

Sample Output

69087442470169316923566147

解题思路:大数模拟即可

#include<cstdio>#include<iostream>#include<cstring>#include<cstdlib>using namespace std;const int maxn = 200;struct bign{  int len, s[maxn];  bign() {    memset(s, 0, sizeof(s));    len = 1;  }  bign(int num) {    *this = num;  }  bign(const char* num) {    *this = num;  }  bign operator = (int num) {    char s[maxn];    sprintf(s, "%d", num);    *this = s;    return *this;  }  bign operator = (const char* num) {    len = strlen(num);    for(int i = 0; i < len; i++) s[i] = num[len-i-1] - '0';    return *this;  }  string str() const {    string res = "";    for(int i = 0; i < len; i++) res = (char)(s[i] + '0') + res;    if(res == "") res = "0";    return res;  }  bign operator + (const bign& b) const{    bign c;    c.len = 0;    for(int i = 0, g = 0; g || i < max(len, b.len); i++) {      int x = g;      if(i < len) x += s[i];      if(i < b.len) x += b.s[i];      c.s[c.len++] = x % 10;      g = x / 10;    }    return c;  }  void clean() {    while(len > 1 && !s[len-1]) len--;  }};istream& operator >> (istream &in, bign& x) {  string s;  in >> s;  x = s.c_str();  return in;}ostream& operator << (ostream &out, const bign& x) {  out << x.str();  return out;}bign a[32768];int main() { while(cin>>a[0]>>a[1]>>a[2]){   for(int i=3;i<=99;i++) {   a[i]=a[i-1]+a[i-2]+a[i-3]; } cout<<a[99]<<endl;}  return 0;}



 

0 0