没看懂,找同学讨论了下后就懂了,主要是阶乘里是5的倍数的有几个?是5^2=25倍数的有几个?是5^3=225倍数的有几个?以此类推。

把这个理解了就好懂了。

http://blog.csdn.net/piaojun_pj/archive/2010/10/30/5976548.aspx

先锋商泰的办事效率真不是盖得啊,上午九点开始宣讲,之后直接笔试,下午就通知通过笔试的同学去面试。面试的时候问了一些C++的基础知识,然后谈谈自己最得意的项目,个人感觉没什么难度,只要基础扎实的话应该没问题。最后现场编程,下面和大家分享一下这道编程题。

题目:计算n!中结尾零的个数(C++实现) 。

当时一看到这道题目便有了思路,很快就写出了代码。我写的代码如下:

#include <stdio.h> /*计算n!结尾零的个数,返回零的个数。*/ int CalZeroNum(int n) { int result=1; int num=0; /*计算n的阶乘,结果保存在result中。*/ int i; for(i=n;i>=1;i--) result*=i; /*计算result结尾零的个数*/ while(1) { if(result%10==0) { result/=10; num++; } else break; } return num;//返回零的个数。 } void main() { printf("10!结尾零的个数为:%d/n",CalZeroNum(10)); }

面试官看了我的代码之后有些不满意,因为这种算法存在很大问题——如果n!很大时(大于32767时),int result就无法保存n!的值,程序就无法正确执行。此外,由于需要进行多次累加和累乘运算,程序的效率也是非常低的。回到宿舍后我参考了网上大牛们的算法,最后总结了几个更好的算法解决这个问题。

算法思想:在1-10两个数相乘要产生0,只有 10×1=2×5,2×5。

  200!=200×199×198……×2×1=2×5×2×5×2×199…. ×2×1;可以分解为质数相乘的形式,很明显有2的个数比5的多,所以只要求出200的阶乘可分解出多少个5相乘,就可得到200的阶乘结尾的连续的零的个数.

即:num=[200/5]+[200/5/5]+[200/5/5/5].

注: [x]表示对x取整.

所以可以通过这个思路很容易的得到任意阶乘结尾连续的零,其示例C语言代码如下:

#include <stdio.h> /*计算n!结尾零的个数,返回结尾零的个数。*/ int CalZeroNum(int n) { int num=0;//n!结尾零的个数 int b=1;//5的次方 while(1) { b*=5; num+=n/b; if(b>n) break; } return num;//返回结尾零的个数 } void main() { printf("20!结尾零的个数为:%d/n",CalZeroNum(20)); }

计算n!中结尾零的个数——上海先锋商泰面试相关推荐

  1. 计算n!中结尾零的个数

    计算n!中结尾零的个数(C++实现) . [cpp] view plaincopy #include /*计算n!结尾零的个数,返回零的个数.*/ int CalZeroNum(int n) { in ...

  2. 细谈volatile限定符——上海先锋商泰面试归来

    volatile的本意是"易变的",由于访问寄存器的速度要快过RAM,所以编译器一般都会作减少存取外部RAM的优化.比如: static int i=0; int main(voi ...

  3. python计算n阶乘中尾部零的个数_(Java)设计一个算法,计算出n阶乘中尾部零的个数...

    展开全部 long 类型对大数阶乘来e68a8462616964757a686964616f31333365633963说存储范围大小,强行使用会溢出,可以使用 BigDecimal. 代码如下:im ...

  4. python计算n阶乘中尾部零的个数_计算n阶乘中尾部零的个数

    写在前面 本来觉得问题挺容易的,不打算记录,谁知道一不小心,还真没做出来.最终凭借"朴实"的算法思想解决了问题,但是其中的曲折还真是汗颜.科学的思维指导确实必不可少,"野 ...

  5. 计算 n! 中末尾0的个数 求n!中p的重数

    题意: 输入正整数n,计算 n! 中末尾0的个数 输入:输入一个正整数n (1≤n≤1 000 000 000) 输出:输出 n! 末尾0的个数 样例输入:3 100 1024 样例输出:0 24 2 ...

  6. 求n!中末尾零的个数

    分析:求n!中末尾零的个数,2和5会出来零,求末尾0的个数,就是求2和5同时出现的次数,要统计2和5出现的次数,易知有,5一定有2,有2不一定有5,所以问题就变成了求n中5出现的次数. #includ ...

  7. 一步一步写算法(之n!中末尾零的个数统计)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 在很多面试的题目中,求n!结果中零的个数也是经常遇到的一道题目.那么这道题目的解决方法究竟是什 ...

  8. 计算n阶乘中尾部零的个数

    计算因数5的个数即可 long long NumOfZero(long long n){long long count=0;while(n>0){count+=n/5;n=n/5;}return ...

  9. python求123逆序数_应用Python来计算排列中的逆序数个数

    在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序.一个排列中逆序的总数就称为这个排列的逆序数.一个排列中所有逆序总数叫做这个排列的逆序数.也就是说,对于 ...

最新文章

  1. OpenShift — 架构设计
  2. Three.js的绘制流程(三)----地形
  3. mysql数据库 集群_mysql数据库集群
  4. c++成员声明中的非法限定名_new 一个对象有哪两个过程?很多人在面试中都问住了...
  5. spring 核心技术
  6. Layer报错:TypeError n.sort is not a function
  7. 摩托罗拉mpkg安装签名方法研究
  8. Ubuntu - Firefox 视频无法播放问题解决方法
  9. Ignite学习笔记——Ignite的安装与配置
  10. 《EfficientDet:Scalable and Efficient Object Detection》论文笔记
  11. html图片自动在div里放大,HTML5+CSS3实现图片的放大/缩小
  12. Could not find  artifact org.pentaho:pentaho-aggdesigner-algorithm:jar:5.1.5-jhyde
  13. 第七届全球云计算大会-中国站9月宁波举办
  14. 贪官产生的本质是什么——谈谈人性与制度的博弈未来
  15. 【观察】谁是中国容器软件市场TOP厂商?权威研究机构IDC发布最新报告
  16. JSONViewer下载路径
  17. 华为HCIE-RS(数通datacom)论述题(十)
  18. 轻松一招,解决go语言科学计数法导致交易数据掐尖的问题
  19. python初学者编程指南源码_如何系统地自学 Python?
  20. 计算机图形学常用算法实现10 多边形裁剪Sutherland-Hodgman算法

热门文章

  1. 如何使用Gilisoft File Lock Pro加密文件和文件夹
  2. mysql排行榜制作思路_排行榜的简单设计思路
  3. 记萌新赛的命题过程与踩气球过程
  4. c语言ascii码表转字母,最实用C语言常用转义字符表_与_ASCII码表完整版.doc
  5. 制作Surfer自定义图例
  6. 3Q大战续集:腾讯再诉360索赔1.25亿
  7. 公告栏模板php代码,PHP_destoon调用自定义模板及样式的公告栏,destoon中默认的首页公告栏调用 - phpStudy...
  8. 你见过1-bit CPU吗?
  9. 业余无线电A类题库注意点(个人用)
  10. 信用卡最低还款与分期付款有什么区别呢?