LintCode 2.尾部的零
2018-01-25 00:04
316 查看
LintCode 2.尾部的零
问题描述
设计一个算法,计算出n阶乘中尾部零的个数样例 :11! = 39916800,因此应该返回 2
问题分析
按正常的思路看,第一步:把 n! 求出。第二步:用得到的这个数取余10的倍数,从10开始,再到100,再到 n *10……..,余数为0,计数器加1,直到余数不为零结束,返回计数器数值。于是有了如下代码。class Solution { public: /* * @param n: A long integer * @return: An integer, denote the number of trailing zeros in n! */ long long trailingZeros(long long n) { // write your code here, try to do it without arithmetic operators. long long sum = 1,k = 0; for (int i = 1; i <= n; i++) { sum *= i; } long long j = 10; do { if((sum % j) == 0) k++; j *= 10; } while (!(sum % j)); return k; } };
代码的错误
提交后发现数据只通过了一半,原因在于long long位数不够,比如 100!,这个数太大了,long long 完全装不下,发现问题并不简单,而且想不出别的办法,于是搜了一下别人做的这个题。class Solution { public: /* * @param n: A long integer * @return: An integer, denote the number of trailing zeros in n! */ long long trailingZeros(long long n) { // write your code here, try to do it without arithmetic operators. long long count=0; while(n>0){ count+=n/5; n=n/5; } return count; } };
代码思路
有5的倍数才能有0 ,看 n!中有多少5的倍数1 2 3 4 5 ------ 2*5 一个0 6 7 8 9 10 ------ 10 一个0 11 12 13 14 15 ------ 12*15 一个0 16 17 18 19 20 ------ 20 一个0 21 22 23 24 25 ------ 25=5*5 两个5 两个0 26 27 28 29 30 ------ 30 一个0 . . . .
参考链接:http://www.cnblogs.com/AndyJee/p/4612314.html
相关文章推荐
- lintcode 2:尾部的零
- 【LintCode】2、尾部的零
- lintcode 2:尾部的零
- lintcode 求n!尾部的零的数目
- LintCode_尾部的零
- LintCode 2 尾部的零
- LintCode Java——尾部的零
- 【计算连乘积中末尾0的个数】LintCode 尾部的零
- LintCode 2.尾部的零
- lintcode-2-尾部的零
- [Lintcode] #2 尾部的零
- LintCode【简单】2. 尾部的零 。代码及思路
- Lintcode 2. 尾部的零
- LintCode Python 尾部的零
- Lintcode 尾部零的个数
- (lintcode)第2题尾部的零
- lintcode 2.尾部的零
- LintCode_002_尾部的零
- Lintcode 2: 尾部的零
- python - LintCode 2. 尾部的零