LintCode 第二题 计算阶乘结果尾部的零
2018-03-01 21:46
309 查看
解法1 硬算(失败)
判断一个数的尾数有多少个零,显然最笨的方法就是依次除以10,100,1000…取余,只要余数为0,则尾部零的的个数加一,直到不为0循环跳出。如果这样计算的话显然与题目”阶乘”不大相符,而且如果阶乘数大的话,会无法存储。解法2 分析”5 25 125 …”出现的次数
参考链接:http://blog.csdn.net/zyh2525246/article/details/53697136具体分析可以见参考链接,阶乘尾数零的个数为5,25,125..倍数个数的和。
如果是求2016!后面0的个数呢?
5的倍数个数为: 2016/5 = 403个
25的倍数个数为: 403/5 = 80个
125的倍数的个数为:
80/5 = 16个
625的倍数的个数为: 16/5 = 3个
所以可以得出2016!后面0的个数为:403+80+16+3 = 502个
实现代码如下:
public class Solution { /* * @param n: An integer * @return: An integer, denote the number of trailing zeros in n! */ public long trailingZeros(long n) { // write your code here, try to do it without arithmetic operators. long result = 0; while(n > 0) { result += n / 5; n /= 5; } return result; } }
相关文章推荐
- lintcode第二题 计算n阶乘中尾部零的个数
- LeetCode Factorial Trailing Zeroes(计算阶乘结果尾部有几个0)
- 如何计算阶乘运算结果尾部有多少个零
- 计算n阶乘中尾部零的个数
- Javascript 计算1*2*3*4......*100[计算100的阶乘结果]
- 计算n阶乘中尾部0的个数
- 设计一个算法,计算出n阶乘中尾部零的个数
- 【java学习记录】11.用多线程实现阶乘的计算过程和结果的读取(thread类ReadThread )
- java阶乘计算获得结果末尾0的个数代码实现
- 计算结果在long范围内的阶乘
- 不计算阶乘获得结果末尾0的个数
- 阶乘尾部零的个数,递归计算
- HDU--1018--Big number!(计算阶乘结果的位数)
- 计算n阶乘中尾部零的个数--O(logN)算法
- 求1000的阶乘结果尾部0的个数
- 设计一个算法,计算出n阶乘中尾部零的个数
- 求1000的阶乘结果尾部0的个数
- 计算n阶乘中尾部零的个数
- 计算n阶乘中尾部零的个数
- 计算1024的阶乘结果有多少个0