题目:求两个正整数的最大公约数和最小公倍数。
基本要求:1.程序风格良好(使用自定义注释模板),两种以上算法解决最大公约数问题,提供友好的输入输出。
提高要求:1.三种以上算法解决两个正整数最大公约数问题。
2.求3个正整数的最大公约数和最小公倍数。
解题思路:
a.求最大公约数
辗转相减法:取两个数中的最大的数做减数,较小的数做被减数,用最大的数减去小数,如果结果为0,则被减数就是这两个数的最大公约数,如果结果不为0,则继续用这两个数中最大的数减较小的数,直到结果为0,则最大公约数为被减数。程序流程图如下:
程序代码:
/**
* 辗转相除法计算两个数的最大公约数
* @param a:参数一
* @param b:参数二
* @return a和b的最大公约数
* */
public static int greatest1(int a,int b) {
while(a!=b) {
if(a>=b)
a=a-b;
else
b=b-a;
}
return b;
}
辗转相除法:取两个数中最大的数做除数,较小的数做被除数,用最大的数除较小数,如果余数为0,则较小数为这两个数的最大公约数,如果余数不为0,用较小数除上一步计算出的余数,直到余数为0,则这两个数的最大公约数为上一步的余数。程序流程图