对一个正整数n,求出n!中末尾0的个数。
对一个正整数n,求出n!中末尾0的个数。
输入
输入有若干行。每一行上有一个整数T,是测试数据组数,接着有T行,每一行包含一个确定的正整数n(n≤1000000000)。
输出
对输入行中的每一个数据n,输出一行,其内容是n!中末尾0的个数。
输入样例 输出样例
3
3 0
100 24
1024 253
下边的代码只是解法的核心部分。
#include <stdio.h>
void main()
{
__int64 n,i,t,two=0,five=0,sum;
scanf("%I64d",&n);
for (i=1;i<=n;i++)
{
t=i;
while (t%2==0 && t!=1)
{
two++;
t/=2;
}
t=i;
while (t%5==0 && t!=1)
{
five++;
t/=5;
}
}
sum = (two>five?five:two);
printf("%I64d\n",sum);
}
//今天看了《编程之美》,原来代码可以如此简单。。。还有一种更快的解法、也很巧妙
#include <stdio.h> void main() { __int64 n,i,t,five=0; scanf("%I64d",&n); for (i=1;i<=n;i++) { t=i; while (t%5==0 && t!=1) { five++; t/=5; } } printf("%I64d\n",five); }
![字节跳动内推](https://img2020.cnblogs.com/blog/323808/202004/323808-20200415172728571-1992447742.jpg)
找我内推: 字节跳动各种岗位
作者:
ZH奶酪(张贺)
邮箱:
cheesezh@qq.com
出处:
http://www.cnblogs.com/CheeseZH/
*
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。