给定一个数字n,找出n!
的十进制表示结尾处的零个数
输入:
第一行输入将包含T =测试用例数。接下来的T行将各自具有一个数n,其中1 <= n <= 10 ^ 9。在这个数字n的阶乘中找出尾随零的数量(最后的零)。
输出:
每个测试用例应该有一行打印给定数字的阶乘的尾随零的数量。
示例输入
4
6
12
18
25
示例输出
1
2
3
6
MyOutput中
2
6
1
... //这表示输入输入的条件没有终止,也没有输出。
MyApproach:
计算尾随零。我检查了5的数量,因为如果有5则肯定会有2,那么最后会产生零。 所以,我编写了以下代码,并且还没有检查过这些数字是否小于或等于4.
以下是我的代码:
public static void zerosCount()
{
Scanner sc=new Scanner(System.in);
int T=sc.nextInt();
for(int i=0;i<T;i++)
{
int count5=0;
int p=sc.nextInt();
while(p>=1)
{
int n=p;
while(n>=5)
{
if(n%5==0)
{
count5++;
n=n/5;
}
}
p--;
}
System.out.println(count5);
}
sc.close();
}
为什么我无法获得正确的输出:
任何人都可以指导我为什么吗?
答案 0 :(得分:2)
@radoh提到的方法不完整,会导致错误的答案,例如100,有24个零,但n / 5只能得到20个。
零的数量取决于5s。所以如果
N = 5然后除以5,得到1
N = 10然后除以5给出2
N = 25然后除以5和25
N = 50然后除以5和25将给你12
N = 100然后除以5 25将给你24
因此,底线是在每个除法之后,将5与5相乘,如果乘法的结果小于等于N,则将N除以结果并添加零计数器变量。
答案 1 :(得分:0)
这就是我在Narendra和radoh
的帮助下解决问题的方法无论输入是什么,我都计算了5的数字并检查数字,直到它大于或等于5.如果一个数字超过一个零或者我说的超过15,则计算总和。