1688网站一起做网店,自己在家怎么做电商,免费外贸电商平台,建设母婴网站的总结问题描述#xff1a;
给一个整数#xff0c;请输出该数字阶乘的后缀0的个数#xff0c;例如#xff1a; 数字7#xff0c;它的阶乘为5040#xff0c;后面有一个0#xff0c;则输出1#xff1b;还有数字10#xff0c;它的阶乘为3628800#xff0c;后面有两个0#x…问题描述
给一个整数请输出该数字阶乘的后缀0的个数例如 数字7它的阶乘为5040后面有一个0则输出1还有数字10它的阶乘为3628800后面有两个0则输出2。
/*
功能求一个整数的阶乘含有多少个0
如 5! 120(1个0)
8! 40320(1个0)
10! 3628800(2个0)
15! 1307674368000(3个0)
*/
#include stdio.h
#include string.h
#include math.h
int sum(int n)
{
int c 0;
while(n 5)
{
c fun(n);
n--;
}
return c;
}
/*
功能 求n是5的多少次幂
返回值n是5的整数次幂(如i)则返回i;否则返回0
*/
int fun(int n) // 返回n是5的多少次幂
{
int i 0;
while(n 5)
{
if(n % 5 0)
{
n / 5;
i;
}
else
break;
}
return i;
}
int main()
{
int n 30;
while(n 1)
{
printf(sum(%d) %d\n, n, sum(n));
n--;
}
return 0;
} 编译运行
[zcmt #179]$make
gcc -g -c -o a.o a.c
gcc -g -o a a.o -lm
[zcmt #180]$./a
sum(30) 7
sum(29) 6
sum(28) 6
sum(27) 6
sum(26) 6
sum(25) 6
sum(24) 4
sum(23) 4
sum(22) 4
sum(21) 4
sum(20) 4
sum(19) 3
sum(18) 3
sum(17) 3
sum(16) 3
sum(15) 3
sum(14) 2
sum(13) 2
sum(12) 2
sum(11) 2
sum(10) 2
sum(9) 1
sum(8) 1
sum(7) 1
sum(6) 1
sum(5) 1
sum(4) 0
sum(3) 0
sum(2) 0
sum(1) 0
[zcmt #181]$ 网上一位牛人写了一个更加简洁的自算法把我的sum()和fun()合并到了一个函数f()如下
int f(unsigned int n)
{
if (n 5) {
return 0;
}
return n / 5 f(n / 5);
}