HDU 5686(斐波那契數列大數)
阿新 • • 發佈:2019-02-02
通過分析,可以發現題目就是一個斐波那契數列,但數很大,所以果斷高精度模板。
#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; }