题目:求两个正整数的最大公约数和最小公倍数。
基本要求:1.程序风格良好(使用自定义注释模板),两种以上算法解决最大公约数问题,提供友好的输入输出。
提高要求:1.三种以上算法解决两个正整数最大公约数问题。
2.求3个正整数的最大公约数和最小公倍数。
1、程序流程图:
2、具体代码:
package GYS;
import java.util.Scanner;
public class Test {
public static void main(String[] args){
Scanner o = new Scanner(System.in);
System.out.println(“请输入第一个整数:”);
int a = o.nextInt();
System.out.print(“请输入第二个整数:”);
int b = o.nextInt();
System.out.println("最大公约数为:");
System.out.println(greatestCommonDivisor(a, b));// 调用maxCommonDivisor()方法
System.out.println("最小公倍数为:");
System.out.println(leastCommonMultiple(a,b));// 调用maxCommonDivisor()方法least common multiple
}
// 求最大公约数
public static int greatestCommonDivisor(int a, int b) {
if (a < b) {// 若a<b,则交换数据
int temp = a;
a = b;
b = temp;
}
if (a % b== 0) {// 若余数为0,返回最大公约数
return b;
}
else { // 否则,进行递归,把b赋给a,把余数赋给b
return greatestCommonDivisor(b, a % b);
}
}
public static int greatestCommonDivisor2(int a, int b) {
if (a < b) { //若m<n,则交换数据
int temp = a;
a = b;
b = temp;
}
while(a%b!=0){
int temp=a%b;//若余数不等于0,交换a,b位置
a=b;
b=temp;
}
return b;//返回b
}
public static int greatestCommonDivisor3(int a, int b)
{
while (true)
{
if ((a = a % b) == 0)
return b;
if ((b = b % a) == 0)
return a;
}
}
//求最小公倍数
public static int leastCommonMultiple(int m, int n) {
return m * n / greatestCommonDivisor(m, n);//两个整数的积除以他们的最大公约数即为最小公倍数
}
}
3、测试截图