大家好,我是开车的阿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); } };