NYOJ 84 阶乘的0

来源:互联网 发布:app软件介绍ppt 编辑:程序博客网 时间:2024/04/29 07:28

阶乘的0

时间限制:3000 ms  |  内存限制:65535 KB
难度:3
描述
计算n!的十进制表示最后有多少个0
输入
第一行输入一个整数N表示测试数据的组数(1<=N<=100)
每组测试数据占一行,都只有一个整数M(0<=M<=10000000)
输出
输出M的阶乘的十进制表示中最后0的个数
比如5!=120则最后的0的个数为1
样例输入
63601001024234568735373
样例输出
0142425358612183837

 

思路:要求M的阶乘的十进制表示中最后0的个数,也就是要求从1~M,因子数5有多少个,因为只有含有因子5,才能配成结果后面为0的数,比如 2 * 5 = 10 ,2 * 10 = 20;

也就是10!= 1*2*3*4*5*6*7*8*9*10 = 3628800,因为只有5和10才含有因子5,因子5的个数为2,因此我们可以推断 11!,12!,13!,14!其最后0的个数均是2,而15!的十进制表示中最后0的个数为3,15!= 1307674368000。而对于25,它含有两个因子5,所以需要多加1个零,每个因子5各产生一个0,而对于625,含有三个因子5,所以需要多加2个0,每个因子5各产生一个0.

 

 #include<stdio.h>int main(){int t;int m;scanf("%d",&t);while(t--){int sum = 0;scanf("%d",&m);while (m != 0){m = m / 5;sum += m;}printf("%d\n",sum);}return 0;}        


 

 

 

0 0