计算n!中结尾零的个数——上海先锋商泰面试
来源:互联网 发布:几何图形识别算法 编辑:程序博客网 时间:2024/06/11 19:57
没看懂,找同学讨论了下后就懂了,主要是阶乘里是5的倍数的有几个?是5^2=25倍数的有几个?是5^3=225倍数的有几个?以此类推。
把这个理解了就好懂了。
http://blog.csdn.net/piaojun_pj/archive/2010/10/30/5976548.aspx
先锋商泰的办事效率真不是盖得啊,上午九点开始宣讲,之后直接笔试,下午就通知通过笔试的同学去面试。面试的时候问了一些C++的基础知识,然后谈谈自己最得意的项目,个人感觉没什么难度,只要基础扎实的话应该没问题。最后现场编程,下面和大家分享一下这道编程题。
题目:计算n!中结尾零的个数(C++实现) 。
当时一看到这道题目便有了思路,很快就写出了代码。我写的代码如下:
面试官看了我的代码之后有些不满意,因为这种算法存在很大问题——如果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语言代码如下:
- 计算n!中结尾零的个数——上海先锋商泰面试归来
- 计算n!中结尾零的个数——上海先锋商泰面试
- 计算n!中结尾零的个数——上海先锋商泰面试归来
- 计算n!中结尾零的个数——上海先锋商泰面试归来
- 计算n!中结尾零的个数
- 计算n!中结尾零的个数
- 面试题:计算n!中结尾零的个数
- 细谈volatile限定符——上海先锋商泰面试归来
- 计算n阶乘中尾部零的个数
- 计算N阶乘中结尾有多少零
- N!结尾0的个数
- 先锋商泰面试
- lintcode第二题 计算n阶乘中尾部零的个数
- 上海先锋商贸科技有限公司面试
- poj1401(计算n!中0的个数)
- 计算1~n中9的个数
- 计算1-n中1的个数
- 计算n!中末尾0的个数
- 数字台阶
- 樱桃装筐
- Spring3.0实现REST实例
- 魔术数
- 关于filter的 求解释
- 计算n!中结尾零的个数——上海先锋商泰面试
- 找零
- busybox移植yaffs2根文件系统
- 打台球
- Linux添加内核系统调用报告
- Accelerated C++ 6.1查找URL
- 阶乘求和之最后一位
- Java的字符日期格式转换
- 备忘录:jsp重定向。使用out.print(); response.sendRedirect();