题目描述
NowCoder号称自己已经记住了1-100000之间所有的斐波那契数。
为了考验他,我们随便出一个数n,让他说出第n个斐波那契数。当然,斐波那契数会很大。因此,如果第n个斐波那契数不到6位,则说出该数;否则只说出最后6位。
输入描述:
输入有多组数据。
每组数据一行,包含一个整数n (1≤n≤100000)。
输出描述:
对应每一组输入,输出第n个斐波那契数的最后6位。
输入例子:
1
2
3
4
100000
输出例子:
1
2
3
5
537501
题目都说了是斐波拉契尔数列问题,哪还有啥好分析的。。。
这里题目有个坑,当n ≥ 29时,需要添加0,补全6位数。
#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;
}