斐波那契凤尾问题

NowCoder号称自己已经记住了1-100000之间所有的斐波那契数。

为了考验他,我们随便出一个数n,让他说出第n个斐波那契数。当然,斐波那契数会很大。因此,如果第n个斐波那契数不到6位,则说出该数;否则只说出最后6位。

输入描述:

输入有多组数据。

每组数据一行,包含一个整数n (1≤n≤100000)。


输出描述:

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

输入例子:

1
2
3
4
100000

输出例子:

1
2
3
5
537501

题目中的坑:

1.1-100000之间的斐波那契数,因为斐波那契额数列的变化很快,所以要判断什么时候超过100000

2.要求输出后六位,为了减少计算,在计算斐波那契数列的时候,就做求余运算

源代码如下:

#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
    int n;
    long  a[100001] = { 1,2 };
    for (int i = 2; i < 100001; i++)
        a[i] = (a[i-1]%1000000 + a[i - 2]%1000000)%1000000;//求余除100000的意思是让数列中的值保留原来的6位尾数
    while (cin >> n) //循环输入n
    {
        if (n<25)  //加上判断,此时的数列值就是100000的分界处
            cout << a[n - 1]<<endl; //直接输出
        else
            printf("%06ld\n",a[n - 1]);//输出后六位
    }
    return 0;
}

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页