原文地址:http://www.cnblogs.com/xinjing/articles/4709337.html
对这个问题,首先我们要从算法进行分析,如何求解一个阶乘数的末尾有多少个零
我们知道任何一个整数都可以分解为几个素因数的乘积,根据算术基本定理,这个分解是唯一的,所以我们对阶乘数中每一个数都分解成素因数的乘积的形式
例如:4=2*2 6=2*3.....
这样6!=1*2*3*4*5*6=1*2*3*(2*2)*5*(2*3),然后我们重新排列,6!=(2*5)*1*3*2*2*2*3,这样只要有一对2*5结尾就会有一个0,因为2*5=10,任何数乘以10末尾一定有一个零,这样问题就转化成一个阶乘数中有多少对2*5,阶乘数末尾就有多少个0
下面用java实现,下面的java程序,首先编写了一个find函数,对每一个阶乘的整数因子求解它的2因子和5因子的个数,然后在主函数中填写一个循环,进行结果的累加,最后比较2和5个数的多少,少的一方就是0的个数。
1 import java.util.Scanner; 2 3 4 public class Test { 5 6 //find函数查找一个整数中包含2和5因子的个数 7 public static int find(int n,int num){ 8 int temp=0; 9 int k=n;//把n的值赋给一个临时变量k,k在每次循环符合条件后整除因子 10 for(int j=1;j<=n;j++){ 11 if(k%num==0){ 12 k=k/num; 13 temp++; 14 15 }else{ 16 break; 17 } 18 } 19 return temp; 20 } 21 public static void main(String[] args) { 22 Scanner input=new Scanner(System.in); 23 //用了一个循环输出,输入0的时候程序退出 24 while(true){ 25 System.out.println("请输入:"); 26 int n=input.nextInt(); 27 if(n==0){ 28 System.out.println("退出程序!"); 29 break; 30 } 31 int sum1=0,sum2=0; 32 for(int i=1;i<=n;i++){ 33 sum1=sum1+find(i,2); 34 sum2=sum2+find(i,5); 35 } 36 System.out.println("2的个数是:"+sum1); 37 System.out.println("5的个数是:"+sum2); 38 System.out.println("0的个数是"+(sum1=sum1<sum2?sum1:sum2));//这里用了一个三元表达式 39 } 40 } 41 }

本文介绍了如何使用JAVA编程求解一个阶乘数的末尾零个数。通过分析算术基本定理,将问题转化为找出阶乘数中2和5的组合个数,每一对2和5对应末尾一个零。提供的JAVA程序通过计算每个因子的2和5因子数量,并累加,最终确定末尾零的总数。

690

被折叠的 条评论
为什么被折叠?



