64,645
社区成员
发帖
与我相关
我的任务
分享
#include<iostream>
#include<string>
#include<vector>
#include<sstream>
using namespace std;
//当N=240时,结果比long int最大值大。所以构造了BigInt类
class BigInt{
public:
vector<short int> In;
//构造函数
BigInt(){};
BigInt(vector<short int> s1):In(s1){};
BigInt(int n){vector<short int> tmp(n);In=tmp;};
//析构函数
~BigInt(){};
int length();
BigInt operator+(BigInt s2);
BigInt operator=(BigInt s3);
friend ostream & operator << (ostream & o, BigInt s4);
bool EqualZero(){
if(In.size()==1 && In[0]==0) return 1;
else return 0;
};
};
//string BigInt::str(){return In;}
int BigInt::length(){return In.size();}
//重载+
BigInt BigInt::operator+(BigInt s2){
vector<short int> result;
bool tmp=0;
int length1=length(),length2=s2.length();
for(int i=0;i<min(length1,length2);i++)
{
if(In[length()-i-1]+s2.In[s2.length()-i-1]+tmp>9){//判断是否需要进位
result.push_back(In[length()-i-1]+s2.In[s2.length()-i-1]-10+tmp);
tmp=1;
}
else{
result.push_back(In[length()-i-1]+s2.In[s2.length()-i-1]+tmp);
tmp=0;
}
}
int diff;
if(length()>s2.length()) diff=length()-s2.length();
else diff=s2.length()-length();
if(diff==0 && tmp==1) result.push_back(1);
for(int i=0;i<diff;i++)
{
if(length()-s2.length()>0) {
if(In[length()-s2.length()-1-i]+tmp>9){//判断进位
result.push_back(In[length()-s2.length()-1-i]+tmp-10);
tmp=1;}
else{result.push_back(In[length()-s2.length()-1-i]+tmp);
tmp=0;}
}
else{
if(s2.In[s2.length()-length()-1-i]+tmp>9){
result.push_back(s2.In[s2.length()-length()-1-i]+tmp-10);
tmp=1;}
else{result.push_back(s2.In[s2.length()-length()-1-i]+tmp);
tmp=0;}
}
}
if(diff!=0 && tmp==1) result.push_back(1);
vector<short int> out;
for(int i=0;i<result.size();i++){
out.push_back(result[result.size()-1-i]);
}
BigInt resultF(out);
return resultF;
}
//重载=
BigInt BigInt::operator = (BigInt s3){
In.erase(In.begin(),In.end());
In.assign(s3.In.begin(),s3.In.end());
}
//重载<<
ostream & operator << (ostream & o, BigInt s4){
for(int i=0;i<s4.length();i++){
o << s4.In[i];
}
return o;
}
vector<vector <BigInt> > num(250 ,vector<BigInt>(250));
int main(){
vector<short int> tmp0;
tmp0.push_back(0);
BigInt zero(tmp0);
vector<vector <BigInt> > num(250 ,vector<BigInt>(250));
for(int i=0;i<250;i++){
for(int j=0;j<250;j++){
num[i][j]=zero;
}
}
vector<short int> tmp1;
tmp1.push_back(1);
BigInt one(tmp1);
for(int i=0;i<250;i++){
num[i][i]=one;
num[0][i]=one;
}
for(int i=1;i<250;i++){
for(int j=i-1;j>0;j--){
if(i-2*j>=j || i-2*j==0){
num[i][j]=num[i][j+1]+num[i-2*j][j];
}
else num[i][j]=num[i][j+1];
}
}
int N;
while(1){
cin >> N;
if(N==0) { cout << "Love" << endl;return 0;}
cout << N << " " << num[N][1] << endl;
}
//return 0;
}