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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址: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 }
复制代码

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值