题目链接:
http://acm.nyist.net/JudgeOnline/problem.php?pid=84
描述
计算n!的十进制表示最后有多少个0
输入
第一行输入一个整数N表示测试数据的组数(1<=N<=100)
每组测试数据占一行,都只有一个整数M(0<=M<=10000000)
输出
输出M的阶乘的十进制表示中最后0的个数
比如5!=120则最后的0的个数为1
样例输入
6 3 60 100 1024 23456 8735373 |
样例输出
0 14 24 253 5861 2183837 |
算法思想:
这道题其实是组合数学中的一道简单题,试想乘积最后有多少个零有谁决定,显然一个数乘以10,乘积会多一个0,那么乘积的尾部0的个数肯定由10的个数决定,而乘积为10最小只能由2*5决定,阶乘中5的个数肯定小于2的个数,故最后只能由5来决定,注意:如25、50、75、100中均有两个5.
综上所述,起始就是求阶乘中5的个数。
源代码
/*
Author:杨林峰
Date:2017.10.24
NYOJ(84):阶乘的0
*/
#include <iostream>
using namespace std;
int getZero(int num)
{
if (num < 5)
return 0;
return num / 5 + getZero(num / 5);
}
int main()
{
int N, M;
cin >> N;
while (N--)
{
cin >> M;
cout << getZero(M) << endl;
}
return 0;
}