PAT乙级(Basic Level)练习题 斐波那契凤尾

题目描述
NowCoder号称自己已经记住了1-100000之间所有的斐波那契数。
为了考验他,我们随便出一个数n,让他说出第n个斐波那契数。当然,斐波那契数会很大。因此,如果第n个斐波那契数不到6位,则说出该数;否则只说出最后6位。

输入描述:
输入有多组数据。
每组数据一行,包含一个整数n (1≤n≤100000)。

输出描述:
对应每一组输入,输出第n个斐波那契数的最后6位。

输入例子:

1
2
3
4
100000

输出例子:

1
2
3
5
537501

\color{red}解题思路:
题目都说了是斐波拉契尔数列问题,哪还有啥好分析的。。。
这里题目有个坑,当n ≥ 29时,需要添加0,补全6位数。
\color{red}代码实现:

#include <iostream>
using namespace std;

int main(int argc, const char * argv[]) {
    //建立一张表,用于记录斐波拉契尔数列的各项值
    int fTable[100001] = {0, 1, 2};
    for (int i = 3; i < 100001; ++i) {
        fTable[i] = fTable[i - 1] + fTable[i - 2];
        fTable[i] = fTable[i] % 1000000;
    }
    int number = 0;
    //scanf返回值为正确输出数据的变量个数,当一个变量都没有成功获取数据时,此时返回-1
    while (scanf("%d", &number) != - 1) {
        //题目有些坑,number >= 29时前面补0,要用06d(输出结果不足六位需要补0)
        printf((number < 29 ? "%d\n" : "%06d\n"),fTable[number]);
    }
    return 0;
}

在这里插入图片描述

发布了1005 篇原创文章 · 获赞 269 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/qq_41855420/article/details/104640983
今日推荐