LeetCode 面试题 16.05. 阶乘尾数

一、题目

  设计一个算法,算出 n 阶乘有多少个尾随零。

示例 1:

输入: 3
输出: 0
解释: 3! = 6, 尾数中没有零。

示例 2:

输入: 5
输出: 1
解释: 5! = 120, 尾数中有 1 个零.

说明: 你算法的时间复杂度应为 O(log n)

  点击此处跳转题目

二、C# 题解

  每隔 5 个数就会出现一个 5,每隔 25 个数会出现 一个 25, 每隔 125 个数会出现一个 125…

n ! = 1 × 2 × 3 × 4 × ( 1 × 5 ) × ⋯ × ( 2 × 5 ) × ⋯ × ( 3 × 5 ) … n! = 1 \times 2 \times 3 \times 4 \times (1 \times 5) \times \dots \times (2 \times 5) \times \dots \times (3 \times 5) \dots n!=1×2×3×4×(1×5)××(2×5)××(3×5)

  因此只需要计算 ans = n / 5 + n / 25 + n / 125 + …

public class Solution {
    public int TrailingZeroes(int n) {
        if (n == 0) return 0;
        return n / 5 + TrailingZeroes(n / 5);
    }
}
  • 时间:20 ms,击败 100.00% 使用 C# 的用户
  • 内存:25.37 MB,击败 100.00% 使用 C# 的用户

  也可以不使用递归求解:

public class Solution {
    public int TrailingZeroes(int n) {
        int ans = 0;
        while (n != 0) {
            n /= 5;
            ans += n;
        }
        return ans;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蔗理苦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值