首页 > 编程 > Java > 正文

关于用Java来写最大公约数和最小公倍数的问题详解及代码

2019-11-06 07:07:21
字体:
来源:转载
供稿:网友

对于刚刚接触java语言的初学者而言,除了“hello world”,比较常见的就是水仙花数、最大公约数、最小公倍数、完数、素数(质数)、一定范围内的奇数和、一定范围内的偶数和等等等等练习,此类练习基本都是针对“for(变量的初始;条件的判断;条件的改变){循环体}”,以及for语句中嵌套“if(条件判断){循环体}”的知识点进行操作的,当然,有些题目的知识点可以拓展到数组、函数等,但是对于刚刚接触Java语言,刚刚欣喜地写出“hello world”的初学者而言,仅仅使用for语句(或while、do……while语句)配合嵌套if语句就可以实现了。那么,此处以求输入的两个整数为例,进行示范。由于工作较忙,能抽出的时间较少,那么此处仅罗列出需要注意的重点内容和拓展内容,针对代码的解析可以参考代码中的注释:

一、注意:

1、如何在代码中实现输入功能?

解析:此处,需要在类前(所有代码之前),调用一个package,即:【import java.util.Scanner;】然后,在代码中(实例参见下面代码)按照如下格式,定义要输入的变量:

Scanner sc=new Scanner(System.in);

System.out.PRintln("请输入第一个整数:");int data1=sc.nextInt();

2、如何能够一次编译运行,多次输入数字执行程序?

解析:此处可以使用while(true){}的方法,将所有要执行的程序循环执行即可,因为当判断条件为真,那么括号内的循环体将一直执行下去。

3、可以使用求余是否为0的办法进行很多程序题目的分析,如判断是否为质数、判断是否为奇数等等等等,详见下附代码。

4、善用三目运算符,例如int min=data1>data2?data2:data1;//使用三目运算符求解输入数字的最小值。

(由于时间关系,不再做更多累述,瑾希望能够帮助更多初学者朋友们解决遇到的此类问题,欢迎批评指正。)

/**需求:写两个方法,分别求两个整数的最大公约数      和         最小公倍数提示:最大公约数  --->较小的这个数开始     依次递减  条件判断  同时用这两个数去做除法,如果能整除哪就是最大公约数*/import java.util.Scanner;//调用可以输入数字的包class G{	public static void main(String[] args){		while(true){//用于多次输入		    Scanner sc=new Scanner(System.in);		    System.out.println("请输入第一个整数:");		    int data1=sc.nextInt();			while(data1<0){//如果不是大于零的整数,那么要重新输入	    	System.out.println("范围错误,请重新输入第一个数:");		    data1=scanner.nextInt();}		    System.out.println("请输入第二个整数:");		    int data2=sc.nextInt();			while(data2<0){//如果不是大于零的整数,那么要重新输入		    System.out.println("范围错误,请重新输入第二个数:");		    data2=scanner.nextInt();}		    int max=data1>data2?data1:data2;//使用三目运算符求解输入数字的最大值		    int min=data1>data2?data2:data1;//使用三目运算符求解输入数字的最小值		    int j=0;			//求最大公约数:定义i为两个数中最小的,通过循环递减,判断是否能被最大数整除,再嵌套if判断能否被最小数整除		    for(int i=min;i<=max;i--){//for语句嵌套if语句的循环的使用		    	if(max%i==0){		    		j=i;		    	    if(min%j==0){				        System.out.println("两个数的最大公约数为:"+j);				        break;			    	}			    }		    }			/*			此处还可以使用另一种方法,即使用逻辑运算符&&,减少判断过程,上述方法是为了增强学者对for语句嵌套if语句的理解,方法如下:			for(int i=min;i>0;i--){		        if(data1%i==0&&data2%i==0){			        System.out.println("最大公约数:"+i);			        break;		        } 	        }			*/									//求最小公倍数:			for(int a=1;;a++){				int b=max*a;				if(b%min==0){					System.out.println("两个数的最小公倍数为:"+b);					break;				}			}					}	}}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表