题目描述
输入一个整数,求其阶乘,然后求出阶乘结果中末尾0的个数
例如
输入10;
输出2;
10的阶乘为362880
分析
求n!结果的末尾有多少个0;
直接通过计算n!会出现溢出的情况,值过于庞大,因此需要找到计算阶乘过程中因子与0之间的关系,
从1开始到n的阶乘的计算过程中,会发现遇见能被5整除的数时,尾部0就会+1;
在10-14的阶乘计算中,3628800、479001600、6227020800、87178291200.。15的阶乘是1307674368000,
我们发现,5有一个零,10有两个0;15有3个0;20里有4个0;
25里有6个0;30里有7个0等等;
因此只需要计算因子中对于5的因子即可,5的因子个数即位0的个数
如30的阶乘中:30,25,20,15,10,5
30/5=6
25/5=5 5/5=1
20/5=4
15/5=3
10/5=2
5/5=1
共含有7个5的因子,
代码示例,
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
System.out.print(SelectZero(n));
}
public static int SelectZero(int n){
int count =0;
int i=0;
int j=0;
for(i = 5;i <= n;i += 5){
j=i;
while(j % 5 == 0){
count++;
j/=5;
}
}
return count;
}
}