您的位置:首页 > 编程语言 > Java开发

用JAVA程序编写实现求一个阶乘数的得数末尾有几个零

2016-09-22 20:16 316 查看
原文地址: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 }


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐