题解
推下前几个,发现这是一个斐波那契数列。
高精度。
#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
using namespace std;
typedef unsigned long long ull;
const int maxn = 210;
string dp[maxn];
string add(string &a, string& b)
{
string ans;
string aa(a.rbegin(), a.rend());
string bb(b.rbegin(), b.rend());
int i = 0;
int carry = 0, sum = 0;
while(i < aa.length() && i < bb.length()){
sum = (aa[i] - '0') + (bb[i] - '0') + carry;
carry = sum / 10;
ans.push_back(sum % 10 + '0');
++i;
}
while(i < aa.length()){
sum = (aa[i] - '0') + carry;
carry = sum / 10;
ans.push_back(sum % 10 + '0');
++i;
}
while(i < bb.length()){
sum = (bb[i] - '0') + carry;
carry = sum / 10;
ans.push_back(sum % 10 + '0');
++i;
}
if(carry){
ans.push_back(carry + '0');
}
return string(ans.rbegin(), ans.rend());
}
int main()
{
dp[1] = "1", dp[2] = "2";
for(int i = 3; i <= 200; ++i){
dp[i] = add(dp[i - 1], dp[i - 2]);
}
int n;
while(cin >> n){
cout << dp[n] << endl;
}
return 0;
}