1. 程式人生 > >PAT 斐波那契鳳尾 (思維水題) - 詳細題解

PAT 斐波那契鳳尾 (思維水題) - 詳細題解

這還是一道蠻有意思的題

首先要知道, 斐波那契數列在大概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;
}