题目描述
NowCoder号称自己已经记住了1-100000之间所有的斐波那契数。
为了考验他,我们随便出一个数n,让他说出第n个斐波那契数。当然,斐波那契数会很大。因此,如果第n个斐波那契数不到6位,则说出该数;否则只说出最后6位。
输入描述:
输入有多组数据。
每组数据一行,包含一个整数n (1≤n≤100000)。
输出描述:
对应每一组输入,输出第n个斐波那契数的最后6位。
示例
输入
1
2
3
4
100000
输出
1
2
3
5
537501
解题思路
将所有斐波那契数列计算出存在vector中,输出v[n-1]即可
- 需要注意的是:控制输出格式用到了 setw() 设置长度和setfill() 设置填充的函数。
其中 setw(n)表示总共长度是n位,setfill(‘a’)表示在原内容前面填充a字符直到指定长度。例如原内容为123 输出时控制格式为setw(6)和setfill('0')
即会输出000123
代码实现
#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;
int main()
{
vector <int> v;
v.push_back(1);
v.push_back(2);
for(int i=2;i<100000;i++)
{
v.push_back(0);
v[i]=(v[i-1]+v[i-2])%1000000; //%1000000可以保证满足结果不超过6位数的要求
}
int n=0;
while(cin>>n)
{
if(n<31)
cout<<v[n-1]<<endl;
else
cout<<setw(6)<<setfill('0')<<v[n-1]<<endl; //若结果大于6位但前面本身是0,直接输出123不符合要求,所以要控制输出格式,满足输出结果为000123
}
return 0;
}
原题链接
https://www.nowcoder.com/questionTerminal/c0a4b917a15f40a49ca10532ab9019fb
有问题欢迎留言讨论哦