PAT 斐波那契鳳尾 (思維水題) - 詳細題解
阿新 • • 發佈:2018-11-19
這還是一道蠻有意思的題
首先要知道, 斐波那契數列在大概95的時候就超出基本資料型別的最大儲存long long的上限了
而如果直觀的考慮用高精度也太麻煩了, 其實因為只需要輸出後六位, 我們每次都只取後六位相加就好了, 也就是%1000000
這個地方記得要判斷一下n多大時候才會超過6位, 然後用printf("%06d")輸出後六位即可了
還有兩個細節:
1. 斐波那契數列前兩項應該是1, 1 但這題裡面卻是1 2
2.取後六位六位不是%100000, 而是%1000000, 也就是6個0
#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #include <string> #include <vector> #include <queue> #include <cmath> using namespace std; #define ms(x, n) memset(x,n,sizeof(x)); typedef long long LL; const LL maxn = 1e5+5; int n, fib[maxn]; void init() { fib[1] = 1, fib[2] = 2; //斐波那契第二項為2 for(int i = 3; i <= maxn; i++) fib[i] = (fib[i-1]+fib[i-2])%1000000; //只取後6位 } int main() { init(); while(cin >> n){ if(n <= 25) cout << fib[n] << endl; else printf("%06d\n",fib[n]); //輸出後六位 } return 0; }