Java50道经典习题-程序6 求最大公约数及最小公倍数
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
分析:用辗转相除法求最大公约数
两个数的最大公约数:设两个数分别为n和m,(n>=m);用定义一个变量i,使用for循环,将i的取值从m一直到1,用i分别去取模于m和n,当两个数被取模的结果都是0时,返回此时变量i的值,此时i的值即为最大公约数
两个数的最小公倍数=两个数之积/最大公约数
1 import java.util.*; 2 public class Prog6 { 3 public static void main(String[] args) { 4 Scanner scan = new Scanner(System.in);// 接收控制台输入的信息 5 System.out.print("请输入第一个整数:"); 6 int num1 = scan.nextInt(); // 取出控制台输入的信息 7 System.out.print("请输入第二个整数:"); 8 int num2 = scan.nextInt(); // 取出控制台输入的信息 9 scan.close(); 10 11 System.out.println("最大公约数是:"+maxCommonDivisor(num1, num2));// 调用maxCommonDivisor()方法 12 System.out.println("最小公倍数是:"+minCommonMultiple(num1, num2));// 调用minCommonMultiple()方法 13 } 14 15 //求最小公倍数 16 public static int minCommonMultiple(int m,int n) { 17 return m*n/maxCommonDivisor(m,n); 18 } 19 20 //求最大公约数 21 public static int maxCommonDivisor(int m,int n) { 22 //判断输入的两个数的大小,保证大的数始终放在第一个参数位置 23 if(m<n) { 24 int temp=m; 25 m=n; 26 n=temp; 27 } 28 29 int i=n;//从大到小,第一次求出来的公约数就是最大公约数,如果不能同时整除两个数,则不是公约数 30 while((n%i!=0)||(m%i!=0)) 31 { 32 i--; 33 } 34 return i; 35 } 36 } 37 /*运行结果 38 请输入第一个整数:6 39 请输入第二个整数:8 40 最大公约数是:2 41 最小公倍数是:24 42 */
The only way to do great work is to love what you do.