【每日刷题】Day92

【每日刷题】Day92

🥕个人主页:开敲🍉

🔥所属专栏:每日刷题🍍

🌼文章目录🌼

1. 面试题 16.05. 阶乘尾数 - 力扣(LeetCode)

2. 取近似值_牛客题霸_牛客网 (nowcoder.com)

3. 数列_牛客题霸_牛客网 (nowcoder.com)

1. 面试题 16.05. 阶乘尾数 - 力扣(LeetCode)

//这类题很明显就是数学类的题,需要找到规律,否则很难解决。

//先让我们理解题目,题目要求我们求出一个数(n)阶乘后的结果有多少个尾随0,尾随零就是这个数的最后面有多少个连续的0

//理解题目后我们再来分析,一个数想要有尾随0,需要满足什么条件呢?

//这里直接说结论,有一个尾随0说明有一个因子10,我们将因子10拆解为两个质因子:2和5,由此我们得出结论,一个数想要有一个尾随0就必须要有一个2和5的相乘。反之,有一个2和5的相乘,就说明这个数有一个尾随0。

//到目前为止我们已经掌握了规律,但这里还有一个小点。

//因为每两个数就会有一个2(2、4、6、8....),而每五个数才有一个5(5、10、15...),因此,2的数量一定是比5要多的,因此我们只需要计算有多少个5相乘就能够计算出有多少个尾随0。

//那么现在的问题就是如何计算有多少个5相乘呢?

//这里就需要发挥我们的数学思维,来看下面的图

//实现代码如下,代码很简单,但是理解起来比较困难

class Solution {

public:

    int Get_n (int n)

    {

        if(n<5)

            return 0;

        else

            return (n/5+Get_n(n/5));

    }

    int trailingZeroes(int n)

    {

        return Get_n(n);

    }

};

2. 取近似值_牛客题霸_牛客网 (nowcoder.com)

//没什么好分析的,基础语法题

#include <iostream>

using namespace std;

int main()

{

    double a = 0;

    cin>>a;

    int b = a;

    if(a-b>=0.5)

        b++;

    cout<<b<<endl;

    return 0;

}

3. 数列_牛客题霸_牛客网 (nowcoder.com)

//思路:我们将数列的每一项求出来存入一个数组中,随后直接访问数组就能得到对应的项。

//注意:题目所给的k范围为1~1000000,因此在求后面项的大小时必然会造成溢出,题目也给了我们提示,让我们求第k项模32767的结果,因此我们在求每一项大小时需要存储模上32767得到的结果。

#include <iostream>

using namespace std;

int main()

{

    int n;

    cin>>n;

    int arr[1000000] = {0};

    arr[0] = 1;

    arr[1] = 2;

    for(int i = 2;i<1000000;i++)

    {

//求出每一项的值

        arr[i] = arr[i-1]*2+arr[i-2];

//防止溢出,模上32767,模完后不会影响后续的项模32767的值

        arr[i]%=32767;

    }

    while(n--)

    {

        int k;

        cin>>k;

        cout<<arr[k-1]<<endl;

    }

    return 0;

}

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值