题目:输入两个正整数,求其最大公约数和最小公倍数。
程序思路:
- 除数不能为0
- 将较大的那个数对较小的那个数取余;(如果a>=b,那就a%b),
- 取余得出的结果为下次预算的除数,上面较小的那个数将作为被除数
- 知道运算到较小为0时,返回较大的数,这个数就是最大公约数
- 最小公倍数就是 原来的两个正整数的积除以最大公约数。
下面java代码:
package com.imooc;
import java.util.Scanner;
public class Suanfa3 {
public static void main(String[] args) {
System.out.println("请输入两个整数:");
Scanner input1 =new Scanner(System.in);
int a = input1.nextInt();
int b =input1.nextInt();
int u= a*b; // 用u来保存 a*b 的值
while(b>0){
if(a>=b&&a%b!=0){
int t = b;
b = a%b; // 利用了递归算法
a = t;
}else if(a%b==0){
break; // a刚好是b的倍数
}else{
int s = a; // 当 a < b 时 ,a b的值交换
a = b;
b = s;
}
}
System.out.println("两个数的最大公约数为:"+b);
System.out.println("两个数的最小公倍数为:"+u/b);
}
}
后来上网查了一下资料,才发现,著名的欧几里德算法比这个算法更好用。有兴趣的朋友可以了解一下。
下面是欧几里德算法的百度百科链接:
http://baike.baidu.com/link?url=tXI15Y6sJcHYfnOl–ggjHTnJzL8AClvpCDrrvMwuHp5GuET-rO8pNu5j76D9smNY6efe5VC8dPZ2wImqvlok_