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

来源:互联网 发布:韩版硅胶手表淘宝 编辑:程序博客网 时间:2024/06/13 08:37

对于刚刚接触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;}}}}}



2 0