求多个数的最大公约数和最小公倍数,用三种方法实现。
题目:求两个正整数的最大公约数和最小公倍数。
基本要求:1.程序风格良好(使用自定义注释模板),两种以上算法解决最大公约数问题,提供友好的输入输出。
提高要求:1.三种以上算法解决两个正整数最大公约
数问题。
2.求3个正整数的最大公约数和最小公倍数。
思路:
首先明确怎样求两个正整数的最大公约数和最小公倍数。
最大公约数:
1.辗转相除法:又名欧几里德算法。辗转相除法的核心就是不断的让两个数做除法运算。
其原理基于两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约数。
2.辗转相减法:辗转相减法即通过对两数的不断减法运算。
例如 :两个自然数35和14,用大数减去小数,(35,14)->(21,14)->(7,14),此时,7小于14,要做一次交换,把14作为被减数,即(14,7)->(7,7),再做一次相减,结果为0,这样也就求出了最大公约数7
3.递归法
最小公倍数:两个数的最小公倍数等于两个数相乘除以最大公约数。
求三个数的最大公约数只需要先求两个数的最大公约数,然后再用求出的最大公约数和第三个数求最大公约数。
三个数的最大公倍数原理同上。
调试:
调试过程中主要遇到的问题是当用户想选择求两个数或三个数时的选择界面,本来的构思是根据用户输入几个数字来判断执行求两个数的方法还是求三个数的方法,但实际操作起来不是很好判断,于是我用了a来保存用户输入的数字2或3,然后根据数字来选择不同的显示界面。
用swicth语句来判断求几个数的最大公约数和最小公倍数,还可以用if语句判断。
还有其他一些拼写错误的问题,不一一赘述。
【求多个数的最大公约数和最小公倍数,用三种方法实现。】代码如下:
/**
* @author LEMON
* @time 2018/9/6
* */
package homework1;
import java.util.Scanner;
public class Homework2 {public static void main(String [] args){
Scanner sc = new Scanner(System.in);
//用键盘输入数据
System.out.println("您要求两个数还是三个数的最大公约数?");
int a=sc.nextInt();
switch (a) {//switch语句 用来判断当a=2时,求两个数的最大公约数和最小公倍数,a=3时,则求三个数的。
case 2:{
System.out.println("请输入第一个整数");
int x= sc.nextInt();
System.out.println("请输入第二个整数");
int y= sc.nextInt();
System.out.println("最大公约数方法一的结果:"+maxCommonDivisor1(x,y));
System.out.println("最大公约数方法二的结果:"+maxCommonDivisor2(x,y));
System.out.println("最大公约数方法三的结果:"+maxCommonDivisor3(x,y));
System.out.println("最小公倍数为:"+minCommonMultiple(x,y));
break;
}case 3:{
System.out.println("请输入第一个整数");
int x= sc.nextInt();
System.out.println("请输入第二个整数");
int y= sc.nextInt();
System.out.println("请输入第三个整数:");
int z= sc.nextInt();
System.out.println("最大公约数为:"+mcd3(x, y, z));
System.out.println("最小公倍数为:"+mcm3(x,y,z));
break;
}
}
}/**
* 辗转相除法:又名欧几里德算法。辗转相除法的核心就是不断的让两个数做除法运算。
*其原理基于两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约数。
**/
public static int maxCommonDivisor1(int x,int y){
int a,b,c,temp;
a=x;
b=y;
if (ay){
x=x-y;
}
else{
y=y-x;
}
}
return x;
}
/**
* 最小公倍数:两个数的最小公倍数等于两个数相乘除以最大公约数
* */
public static int minCommonMultiple(int x ,int y){
return x*y/maxCommonDivisor1(x,y);
}
/**
* 求三个数的最大公约数只需要先求两个数的最大公约数,然后再用求出的最大公约数和第三个数求最大公约数。
* */
public static int mcd3(int x,int y,int z){
return maxCommonDivisor1(maxCommonDivisor1(x, y),z);
}
/**
* 求三个数的最小公倍数只需要先求出两个数的最小公倍数,然后再用求出来的最小公倍数和第三个数求最小公倍数。
* */
public static int mcm3(int x,int y,int z){
return minCommonMultiple(minCommonMultiple(x,y),z);
}}
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量