zoj2022
来源:互联网 发布:网络专题策划书范文 编辑:程序博客网 时间:2024/06/05 21:03
这道题很是。。。。。。。。。。媛姐都对我无语了,copy了媛姐的代码先放着吧
下面是纠结的一段对话。。。。。。。。。
晃晃 17:00:22
CSDN的:要看1到n连续相乘尾数有多少个0,就看这n个数中,有多少个是5的倍数。因为1-n个数中肯定可以提供足够的偶数,所以,只要有5的倍数就一定能够把它乘成10的倍数,就是说n以下有多少个数是5的倍数,那么它的阶乘就有多少个0。
Moonlight♡ 16:59:59
恩
晃晃 17:00:57
不理解。。。。。。
Moonlight♡ 17:00:32
因为 10*任何一个数 末尾至少产生一个0吧?
晃晃 17:01:23
n以下有多少个数是5的倍数,那么它的阶乘就有多少个0。
Moonlight♡ 17:00:39
不对
晃晃 17:01:31
嗯
Moonlight♡ 17:00:46
比如25
晃晃 17:01:38
??
Moonlight♡ 17:00:53
25 = 5*5
他提供了两个5
如果有两个2的话
晃晃 17:02:09
==
Moonlight♡ 17:01:21
那么它成开的话 就是2个0
晃晃 17:02:14
我想想
Moonlight♡ 17:01:24
恩
晃晃 17:03:09
这个可以理解
但是
为什么其他的就不产生零了??
Moonlight♡ 17:03:16
10 的话 可以分解为2*5。。
其实你只要判断 1* 2*3*4*...n 可以分解5^x* Y 求那个x就行了
晃晃 17:10:11
先了解这种算法吧,以后再想为什么。。
我copy了一下你的代码
Moonlight♡ 17:09:51
你想想5进制。。。
晃晃 17:12:49
呃。。。有什么联系吗???
Moonlight♡ 17:15:33
好吧 你先放着吧。。
晃晃 17:16:52
。。。呃。
CSDN的:要看1到n连续相乘尾数有多少个0,就看这n个数中,有多少个是5的倍数。因为1-n个数中肯定可以提供足够的偶数,所以,只要有5的倍数就一定能够把它乘成10的倍数,就是说n以下有多少个数是5的倍数,那么它的阶乘就有多少个0。
Moonlight♡ 16:59:59
恩
晃晃 17:00:57
不理解。。。。。。
Moonlight♡ 17:00:32
因为 10*任何一个数 末尾至少产生一个0吧?
晃晃 17:01:23
n以下有多少个数是5的倍数,那么它的阶乘就有多少个0。
Moonlight♡ 17:00:39
不对
晃晃 17:01:31
嗯
Moonlight♡ 17:00:46
比如25
晃晃 17:01:38
??
Moonlight♡ 17:00:53
25 = 5*5
他提供了两个5
如果有两个2的话
晃晃 17:02:09
==
Moonlight♡ 17:01:21
那么它成开的话 就是2个0
晃晃 17:02:14
我想想
Moonlight♡ 17:01:24
恩
晃晃 17:03:09
这个可以理解
但是
为什么其他的就不产生零了??
Moonlight♡ 17:03:16
10 的话 可以分解为2*5。。
其实你只要判断 1* 2*3*4*...n 可以分解5^x* Y 求那个x就行了
晃晃 17:10:11
先了解这种算法吧,以后再想为什么。。
我copy了一下你的代码
Moonlight♡ 17:09:51
你想想5进制。。。
晃晃 17:12:49
呃。。。有什么联系吗???
Moonlight♡ 17:15:33
好吧 你先放着吧。。
晃晃 17:16:52
。。。呃。
#include <stdio.h> int main() { int ncases,n,sum; scanf("%d",&ncases); while(ncases--) { sum = 0; scanf("%d",&n); while( n/5 ) { sum += n/5; n /= 5; } printf("%d\n",sum); } return 0; }