大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧!

题目:计算尾随零的个数

题目考察的知识点:

这道题目主要考察数学思维和编程结合。我们需要理解题目中描述的草的生长规律,然后利用编程语言来实现计算逻辑。同时,需要注意处理大数问题和正确统计因子2和因子5的个数。

题目解答方法的文字分析:

题目中给出了农场里有n株特殊的草,生长速度每天翻倍。我们需要计算m天后的草的数量,并返回尾随零的个数。

我们的解题思路如下:

首先,我们需要计算每天草的数量。我们使用变量grass来表示每天的草的数量,并初始化为n。

接下来,我们使用一个循环来模拟草的生长过程,每天将草的数量翻倍。我们循环m次,每次将grass乘以2。

在每次循环中,我们需要统计因子2和因子5的个数。因为草的数量可能非常大,我们使用变量count2和count5来分别统计因子2和因子5的个数,并初始化为0。

我们需要注意,每次计算因子2和因子5的个数时,要判断数字是否能被2或5整除,才能正确统计因子的个数。如果能被整除,我们将count2或count5加1,并将grass除以2或5,继续计算下一次的因子个数。

最后,我们取count2+m和count5的最小值,即为尾随零的个数,返回这个结果即可。

让我们看看一个例子:

假设n=10,m=3,草的生长过程如下:

第1天:10株草

第2天:10 * 2 = 20株草

第3天:20 * 2 = 40株草

在第3天时,草的数量为40,其中有1个因子5(40 = 5 * 2 * 2)。因为count2为3(来自n=10中的因子2的个数),所以尾随零的个数为min(3+3, 1),结果为1。

本题解析所用的编程语言:C++

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param n int整型 
     * @param m int整型 
     * @return int整型
     */
    int trailingZeroes(int n, int m) {
        // 统计因子2的数量
        int count2 = 0;
        int tmp = n;
        while (tmp >= 2 && tmp % 2 == 0) {
            count2++;
            tmp /= 2;
        }

        // 统计因子5的数量
        int count5 = 0;
        tmp = n;
        while (tmp >= 5 && tmp % 5 == 0) {
            count5++;
            tmp /= 5;
        }

        return min(count2 + m, count5);
    }
};