通过分析,可以发现题目就是一个斐波那契数列,但数很大,所以果断高精度模板。
#include <iostream>
#include <string>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
string &_string_add_string (const string &a, const string &b, string &res) {
int sum_value = 0, add_bit = 0;
const int alen = a.length(), blen = b.length();
res = "0" + (alen > blen ? a : b);
for (int i = alen-1, j = blen-1, k = res.length() - 1;
i >= 0 || j >= 0 || add_bit > 0;
--i, --j, --k) {
sum_value = (i>=0 ? a[i]-48: 0) + (j>=0 ? b[j]-48: 0) + add_bit;
add_bit = sum_value / 10;
res[k] = sum_value%10 + '0';
}
if (res[0] == '0') { res = res.substr (1, res.length() - 1); }
return res;
}
string fib (int n) {
if (0 == n) { return "0"; }
if (1 == n || 2 == n) { return "1"; }
string a = "1", b = "1", ret = "0";
for (int i = 3; i <= n; ++i) {
_string_add_string (a, b, ret);
b = a;
a = ret;
}
return ret;
}
int main (void) {
int n;
string a, b, c;
string ret;
while (scanf ("%d", &n) != EOF) {
printf ("%s\n", fib (n+1).c_str() );
}
return 0;
}