如何判断1024!末尾有多少个0
程序员文章站
2022-04-15 18:56:41
分析:方法一:暴力法 简单的方法就是就算出1024!的值,然后判断末尾有多少个0.但是这种方法有两个非常大的缺点:第一算法效率非常低下;第二:当这个数字比较大的时候直接计算阶乘可能会导致数据溢出,从而导致计算结果出现偏差。因此,下面给出另外一种比较巧妙的方法。方法二:因子法 5与任何一个偶数相乘都会增加末尾0的个数,由于偶数的个数肯定比5的个数多,因此1~1024所有的数字中有5的因子的个数决定了1024!末尾0的个数。因此只需要统计因子5的个数即可。此外5与偶数相乘会使末尾增加一个0,25(有...
分析:
方法一:暴力法
简单的方法就是就算出1024!的值,然后判断末尾有多少个0.但是这种方法有两个非常大的缺点:第一算法效率非常低下;第二:当这个数字比较大的时候直接计算阶乘可能会导致数据溢出,从而导致计算结果出现偏差。因此,下面给出另外一种比较巧妙的方法。
方法二:因子法
5与任何一个偶数相乘都会增加末尾0的个数,由于偶数的个数肯定比5的个数多,因此1~1024所有的数字中有5的因子的个数决定了1024!末尾0的个数。因此只需要统计因子5的个数即可。此外5与偶数相乘会使末尾增加一个0,25(有两个因子5)与偶数相乘使末尾增加两个0,125(有三个因子5)与偶数相乘会使末尾增加三个0,625(有四个因子5)与偶数相乘会使末尾增加四个0。
实现代码:
package lock;
public class T17 {
public static int zeroCount(int n)
{
int count=0;
while(n>0)
{
n=n/5;
count+=n;
}
return count;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.print("1024!末尾的0的个数为:"+zeroCount(1024));
}
}
运行结果:
算法分析:
由于这种算法循环的次数为n/5,因此算法时间复杂度为O(N)。
引申:如何计算N!末尾有几个0?
从上面的分析可以看出N!末尾的个数为N/5+N/5^2 +N/5^3+…+ N/5^m (5^m<N 且5^(m+1)>N)。
本文地址:https://blog.csdn.net/qq_45828598/article/details/109250405
上一篇: Java基础语法学习(匿名对象、static关键字、常用工具类api)
下一篇: ssm框架整合演示