求最大公约数和最小公倍数

来源:互联网 发布:域名查询注册时间 编辑:程序博客网 时间:2024/05/21 10:22
/*
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。


思路:
1,先比较两个数的大小,取出最小的数作为除数最大值min
  在遍历1到x之间满足能够同时被n,m整出的最大整数,即为最大公约数
2,两个数乘积作为公倍数的最大值max,遍历1到到max,满足同时除以n和m的最小整数即为最小公倍数。
*/
import java.util.Scanner;
public class GYS{
public static void main(String[] args){
System.out.println("请输入两个正整数");
Scanner s = new Scanner(System.in);
int m = s.nextInt();
int n = s.nextInt();
/*try{
gys(m,n);
}catch (Exception e){
e.printStackTrace();
//System.out.println(e.getMessage());
}*/

gys(m,n);

}

//定义函数用于输出两个数的最大公约数
public static void gys(int m,int n)//throws RuntimeException
{
//判断两个数是否为0
if((m==0)|(n==0)){
//throw new ArithmeticException("数据不能为0");
throw new RuntimeException("两个数都不能为0");
}

//初始化公约数
int numbgys = 1;
//最小值min存储m和n两个数中最小的数,max1存储最大的数
int min = 0;
int max1 = 0;
//判断m和n哪个数是最小的和最大的数
if(m>n){
min = n;
max1 = m;
}
else{
min = m;
max1 = n;
}

//通过for循环找出最大公约数
for(int i=1;i<=min;i++){
if((m%i==0)&&(n%i==0)){
numbgys = i;
}
}
System.out.println(m + "和" + n + "最大公约数为:" + numbgys);

//初始化最小公倍数,最大的公倍数
int numbgbs = m*n;
//遍历max到1的所有整数
for(int i=m*n;i>=max1;i--){
if((i%n==0)&&(i%m==0)){
numbgbs = i;
}
}
System.out.println(m + "和" + n + "最小公倍数为:"+ numbgbs);
}
}


//自定义异常类
class FushuException extends Exception{
public FushuException(String message){
super(message);
}
}

/*
异常总结:
1,如果在方法上抛出的异常是RuntimeException,则调用者可以不try catch(),否则必须catch
2,自定义异常类也是一样,只有继承RuntimeException不需要调用者catch.
3,抛出RuntimeException可以不catch,自定义异常类继承RuntimeException,可以不再方法上声明抛出。
*/
0 0
原创粉丝点击