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 */

 

posted @ 2019-04-30 16:43  parkour高手  阅读(1242)  评论(0编辑  收藏  举报