N N!
0 1
1 1
2 2
3 6
4 24
5 120
10 3628800
如果要算9999!的最后一个非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编辑过]
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