关注我们获取更多计算机考研信息
? 今日习题
设计一个算法,算出 n 阶乘有多少个尾随零。
示例 1:
输入: 3
输出: 0
解释: 3! = 6, 尾数中没有零。
示例 2:
输入: 5
输出: 1
解释: 5! = 120, 尾数中有 1 个零.
说明: 你算法的时间复杂度应为 O(log n) 。
……⏰ 思考时间……
如果你想好答案了
请查看解题思路和代码实现
▼
·解题思路·
1.n / 5 = x, x表示n阶中有多少个5得倍数
2.x / 5 = y, y表示x中有多少个5的倍数
3.y / 5 = z, z表示y中有多少个5的倍数
如n = 25,有5,10,15,20,25这5个5的倍数,其中25 = 5 * 5;所以25 / 5 = 5,5 / 5 = 1,即 5 + 1 = 6,则一共6个尾0。
如n = 50,有5,10,15,20,25,30,35,40,45,50,其中25 = 5 * 5,50 = 5 * 5 * 2;所以50 / 5 = 10, 10 / 5 = 2,即10 + 2 = 12,则一共12个尾0。
以此类推:
·代码实现·
class Solution {
public:
int trailingZeroes(int n) {
int sum = 0;
while (n >= 5) {
n /= 5;
sum += n;
}
return sum;
}
};
微信关注“字节408考研”,
免费获取各院校计算机软件考研信息与专业课资料!