用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的个数。
对这个问题,首先我们要从算法进行分析,如何求解一个阶乘数的末尾有多少个零
我们知道任何一个整数都可以分解为几个素因数的乘积,根据算术基本定理,这个分解是唯一的,所以我们对阶乘数中每一个数都分解成素因数的乘积的形式
例如: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的整数,实现下面功能。
- 如何实现用Java编写程序,设计一个模拟电梯运行的类
- 编写一个 JAVA 程序,实现输出考试成绩的前三名
- Rhino 是一个完全使用Java语言编写的开源JavaScript实现。Rhino通常用于在Java程序中,为最终用户提供脚本化能力。它被作为J2SE 6上的默认Java脚本化引擎。
- 【Java】实现一个根据日期判断星座程序的编写
- Java实例 定义任务的一个发射小程序 实现Runnable接口并编写run()方法
- 【practice】编写一个 JAVA 程序,实现输出考试成绩的前三名
- 用java编写一个简单的字符串加密解密程序,将字符串分成若干行,实现字符串以一列一列读取,并还原之前输入的字符串。这里实现4行输出。
- 笔试题——编写java程序:输入一个字符串,判断有几个英文字母,有几个数字,有几个其它的字符
- java 编写程序实现从控制台接收一个 5 位以上的整数,使用数组来判断该数字 * 是否是回文数。(例如:789987,12344321是回文数)
- 【Java】实现一个根据日期判断星座程序的编写
- 一个用Dijkstra算法实现的路由算法的java程序——6 STDijkstraAdv类
- 一个用Dijkstra算法实现的路由算法的java程序——9 图信息文件示例
- 一个用JAVA实现的日志备份程序
- 编写一个文件传输的JAVA程序
- 从易到难编写C++程序,(8)问题:实现一个矩阵类
- 一个使用JAVA编写的类似按键精灵的程序,支持脚本文件编写(含源代码)
- 一个使用JAVA编写的类似按键精灵的程序,支持脚本文件编写(含源代码)
- 一个使用JAVA编写的类似按键精灵的程序,支持脚本文件编写(含源代码)
- 一个使用JAVA编写的类似按键精灵的程序,支持脚本文件编写(含源代码)