| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1400 人关注过本帖
标题:[求助]请问如何快速求得N!的最后一个非0数字
只看楼主 加入收藏
企鹅
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2006-7-14
收藏
 问题点数:0 回复次数:10 
[求助]请问如何快速求得N!的最后一个非0数字

N N!
0 1
1 1
2 2
3 6
4 24
5 120
10 3628800

如果要算9999!的最后一个非0数,有没好的算法

搜索更多相关主题的帖子: 数字 算法 
2007-08-16 01:12
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
O(n)和O(logn)两种方法,前者直接硬乘并取余数,后者用周期性来做
2007-08-16 01:22
企鹅
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2006-7-14
收藏
得分:0 
可否详细点说说周期怎么做.还有.楼上的.我注册了你的那个网站.那个交流群怎么进去?
2007-08-16 01:25
crackerwang
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:833
专家分:0
注 册:2007-2-14
收藏
得分:0 
这个题目我做过.
楼上利用周期性的LOG(n)不知道是怎么弄
我记得好像是第推n和n/5的末尾数字的关系也是个LOG(n);

2007-08-16 01:27
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
以下是引用企鹅在2007-8-16 1:25:21的发言:
可否详细点说说周期怎么做.还有.楼上的.我注册了你的那个网站.那个交流群怎么进去?

你做出一个题(AC)就可以进了

2007-08-16 01:29
devfhpgah
Rank: 1
来 自:江西
等 级:新手上路
帖 子:204
专家分:0
注 册:2007-8-16
收藏
得分:0 
“如果要算9999!的最后一个非0数,有没好的算法”这句话我没太看懂,你举个例子!

努力才会成功!
2007-08-16 04:34
企鹅
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2006-7-14
收藏
得分:0 
回复:(雨中飞燕)以下是引用企鹅在2007-8-16 1:25:2...

终于AC了一个 very easy 的题目
请问怎么进群啊

2007-08-16 04:45
noah_shi
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2007-8-14
收藏
得分:0 

这道题目,重在分析。
要看9999!的最后一个非0数字。自要考查每一个乘数的最后一个非0数字。
那么从9999!=1*2*3*4*5*6*7*8*9*10*11*12*13*14*15……
可以得到所有乘数的最后一个非0数字为1*2*3*4*5*6*7*8*9*1*1*2*3*4*5……
显然是周期性数列!
那么不就好办啦?
只要知道1*2*3*4*5*6*7*8*9 = 326880 ,最后一个一个非0数字为8;
那么9999!中有1111组“1*2*3*4*5*6*7*8*9”。(注:1111组,明白的吧?)
那么9999!的最后一个非0数字就是8^1111的最后一个非0数字。

8^1111的最后一个非0数字,怎么算?
还是分析!
8^1111=2^3333=2*2*2*2*2…… 每乘2得到的结果末尾变化为:2,4,8,6,2,4,8,6,2……
还是周期数字吧 :2,4,8,6
3333%4 = 1,那么2^3333的最后一个数字为2.

要看9999!的最后一个非0数字就为2。

思路写成算法,时间复杂度是O(1);

[此贴子已经被作者于2007-8-16 10:35:26编辑过]


2007-08-16 10:02
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
以下是引用devfhpgah在2007-8-16 4:34:48的发言:
“如果要算9999!的最后一个非0数,有没好的算法”这句话我没太看懂,你举个例子!

9999!末尾有
9999/5=1999...4
1999/5=399...4
399/5=79...4
79/5=15...4
15/5=3...0
3<5 End
0的个数等于1999+399+79+15+3=2495


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-08-16 10:23
noah_shi
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2007-8-14
收藏
得分:0 
以下是引用卧龙孔明在2007-8-16 10:23:32的发言:

9999!末尾有
9999/5=1999...4
1999/5=399...4
399/5=79...4
79/5=15...4
15/5=3...0
3<5 End
0的个数等于1999+399+79+15+3=2495

最后一个非0数!不是“0的个数”!


2007-08-16 10:30
快速回复:[求助]请问如何快速求得N!的最后一个非0数字
数据加载中...
 
   



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

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