//求阶乘结果需要使用使用递归 核心是函数recv(int n); sum=n*recv(n-1);
//求尾部0的个数时,我使用的是函数pow(10,k),k初值为1,用sum%pow(10,k),while(1),余数不为0时输出k,此时k即尾部0的个数
//需要注意int型只能计算到12的阶乘,之后溢出,我使用unsigned long可以再多算几个
#include
#include
using namespace std;
class solution{
public:
unsigned long recv(int n);
unsigned long getzeros();
private:
int n,k=0; unsigned long sum=1;
};
unsigned long solution::recv(int n)
{
if(n==1)
{
return 1;
}
sum=n*recv(n-1);
return sum;
}
unsigned long solution::getzeros()
{
k=0;
while(1)
{
unsigned long x = pow(10,k);
unsigned long y = sum % x;
if (y!=0)
{
return k-1;
}
else
{
k++;
}
}
}
int main(){
solution solu;
cout<>p;
unsigned long q=solu.recv(p);
cout<
int k=solu.getzeros();
cout<
return 0;
}