| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2274 人关注过本帖, 1 人收藏
标题:n!末尾有多少个0
只看楼主 加入收藏
wang155423
Rank: 6Rank: 6
等 级:侠之大者
帖 子:216
专家分:408
注 册:2011-9-4
收藏
得分:0 
回复 9楼 beyondyf
大哥,不要介意,算法原理我明白,就是对n!中的n个数的乘积求含5的个数之和,但怎么求一个数含多少个5呢???这里我不明白。。。望指导,谢谢。。
2011-12-04 10:32
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
嗯,态度可嘉,我也不是为了分才来这里的,只不过比较厌恶那些只求结果,拿了答案就走人的选手。

首先要分析末尾零的成因。任何数都有一个唯一质因数分解式,在这些质数相乘的过程中,能形成10的整数倍的只有2 * 5。

而对于阶乘这样的序列来说,其中因子2的含量远大于因子5的含量,所以只需要统计其中因子5的数量就可以得出末尾0的数量。

就单个数而言,能被5整除一次,自然就包含一个因子5。那么整除的次数就是因子5的次数。

而对于阶乘这样的连续数列来说,每5个数就会出现一个能被5整除的数。将这些数提取出来并都除5后形成一个新的1-K的序列,并具有同样的性质。

已经分析到这份上了,直接给你看代码好了。希望你真明白这是怎么回事了。
程序代码:
#include<stdio.h>
int main()
{
    int a, n;
    scanf("%d", &n);
    for(a = 0; n /= 5; a += n);
    printf("%d\n", a);
    return 0;
}

重剑无锋,大巧不工
2011-12-04 10:58
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
如果真的明白了,告诉我上面代码的时间复杂度是多少。

重剑无锋,大巧不工
2011-12-04 11:00
wang155423
Rank: 6Rank: 6
等 级:侠之大者
帖 子:216
专家分:408
注 册:2011-9-4
收藏
得分:0 
回复 12楼 beyondyf
代码好像有问题,循环怎么写成这样了呢,而且是死循环呢????代码逻辑好像也不对
2011-12-04 11:24
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
呵呵,你运行过了么? 只当再学学语法知识吧。

重剑无锋,大巧不工
2011-12-04 11:30
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
呵呵,不要轻易地说代码有问题,多动脑琢磨琢磨,拿笔在纸上画画

总有那身价贱的人给作业贴回复完整的代码
2011-12-04 11:36
wang155423
Rank: 6Rank: 6
等 级:侠之大者
帖 子:216
专家分:408
注 册:2011-9-4
收藏
得分:0 
回复 15楼 beyondyf
嗯,运行结果完全正确,只是我还是不太明白写的那个for循环,n/=5,怎么能让循环终止呢,难道是n=0就跳出循环了??这个语法我还真不明白,请赐教。。。不慎感激。。。
2011-12-04 22:17
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:0 
以下是引用wang155423在2011-12-4 22:17:28的发言:

嗯,运行结果完全正确,只是我还是不太明白写的那个for循环,n/=5,怎么能让循环终止呢,难道是n=0就跳出循环了??这个语法我还真不明白,请赐教。。。不慎感激。。。

if (a=b)这个是什么意思呢?就是先把b赋值给a,然后如果a!=0执行后面的语句,上面那个野一样,如果n除以5后不等于0,则继续此循环,大概就是这个意思,算法复杂度应该是log5(n),然后麻烦杨大哥看一下我的那个问题,纠结得蛋疼
2011-12-04 22:24
原味好
Rank: 4
来 自:西安
等 级:业余侠客
帖 子:59
专家分:250
注 册:2011-11-29
收藏
得分:0 
9楼的,我佩服
2011-12-04 22:31
wang155423
Rank: 6Rank: 6
等 级:侠之大者
帖 子:216
专家分:408
注 册:2011-9-4
收藏
得分:0 
我也很佩服
2011-12-05 10:10
快速回复:n!末尾有多少个0
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.040588 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved