回首页 回首页 ◎ 设为首页  
◎ 收藏本站  
◎ 给我留言  
  
  首 页  C/C++教程  C++之父的FAQ  C/C++动向  C/C++源代码  C/C++误区  Unix/Linux  下载中心  乱七八糟  蚂蚁的Blog  
  当前位置:首 页 >> C/C++源代码 >> 数据结构与算法 C++ >> 阶乘 n! 末尾 0 的个数
最 近 更 新
阶乘 n! 末尾 0 的个数
计算二进制中 1 的个数推荐
[C++] 斐波那契数列
[源代码] 数据结构与算..
[数据结构 C++]链队列
最 新 推 荐
计算二进制中 1 的个数推荐
热 门 排 行
[数据结构 C++]链队列
[源代码] 数据结构与算..
[C++] 斐波那契数列
计算二进制中 1 的个数推荐
阶乘 n! 末尾 0 的个数
站 内 搜 索

Web stdcpp.cn
关键词

搜索方式

搜索范围

精确匹配
广 告

阶乘 n! 末尾 0 的个数


来源:蚂蚁的 C/C++ 标准编程 作者:Antigloss 等级:一般
发布于2007-07-26 13:44 被读1289次 【字体:

分析:

n! 末尾有多少个 0 取决于从 1 到 n 的各个数的因子中 2 和 5 的个数。又因为 2 的个数远远多于 5 的个数,所以只要求出这当中 5 的个数即可。不断地用 n 除以 5,直到结果为 0,将中间的结果都加起来,即可得到因子 5 的个数。例如,100/5 = 20,20/5 = 4,4/5 = 0。因此,1 到 100 中因子 5 的个数为 (20 + 4) = 24 个,亦即 100! 末尾有 24 个 0。

代码如下:

#include <cstddef>

std::size_t ntrailingzero(std::size_t n)
{
    std::size_t cnt = 0;
    while ( n /= 5 )
    {
        cnt += n;
    }
   
    return cnt;
}

这个计算方法正确性的证明网上有很多,搜索一下就知道了。不过,目前我还没找到计算 n! 中一共有多少个 0 的简便算法,知道的人请举手。谢谢~

本文版权归 蚂蚁的 C/C++ 标准编程 以及 作者 Antigloss 共同所有,转载请注明原作者和出处。谢谢。



相关专题:暂无相关专题

上一篇:计算二进制中 1 的个数
下一篇:无相关文章

共有评论 0 条 网友评分 1分 查看全部评论

查看全部评论

【发表评论】 评分:1分 2分 3分 4分 5分


验证码:

Powered By Www.Xydw.COM Ver1.14 管理
Copyright © 2005-2006 蚂蚁的 C/C++ 标准编程 All Right Reserved. XCMS
粤ICP备06014124号   站长:Antigloss