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
。。。呃。
#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;  }  


 

原创粉丝点击