POJ

来源:互联网 发布:c语言嵌入式汇编 编辑:程序博客网 时间:2024/06/13 22:29

序列
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 8289 Accepted: 3752

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

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 longusing 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;}