斐波那契凤尾

链接:https://www.nowcoder.com/questionTerminal/c0a4b917a15f40a49ca10532ab9019fb
来源:牛客网

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

输入描述:

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

输出描述:

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

示例1
输入

1
2
3
4
100000

输出

1
2
3
5
537501

解题思路:
1.写出斐波那契数列的公式,注意第二位输出的是2;
2.保留后六位,直接%1000000即可,因为加法也是从个位数上开始相加,斐波那契数超过6位就保留6位,没超过%也是本身;
3.超过6位,最后输出6位数,没有超过6位,则直接输出该数,则就要判断斐波那契数是否超6位,此时的n值是多少,即设一个边界值确定。

#include<iostream>

using namespace std;

int main()
{
    int border = -1;
    long long ans[100000];
    ans[0] = 1;
    ans[1] = 2;
    for(int i = 2; i < 100000; i++)
    {
        long long next = ans[i - 1] + ans[i - 2];
        if(border == -1 && next >= 1000000)
        {
            border = i + 1;  //找到边界,下标与边界关系
        }
        ans[i] = next % 1000000;  //直接取后6位即可
    }
    int n = 0;
    while(cin>>n)
    {
        
        long long f = ans[n - 1];
        if(n >= border)
        {
            printf("%06d\n",f);
        }
        else
        {
            printf("%d\n",f);
        }
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值