package 程序设计方法学作业二;
import java.util.Scanner;
class HomeWork{ //求最大公约数和最小公倍数
public void gongYue1() {//求两数最大公约数和最小公倍数的方法1-辗转相除法
System.out.println("请输入要进行判断的两个数");
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
int b=sc.nextInt();//a,b为要进行计算的两个数
int i = a;//i,j保留a,b的值
int j = b;
int x =0,y =0;//X为排序所用参数,Y为算法所用中间参数
if(a < b){ //进行排序,始终保持a为较大数
x = b;
b = a;
a = x;
}
while(b != 0){//开始进行辗转相除
y = a % b;
a = b;
b = y;
}
System.out.println(i+"和"+j+"的最大公约数是:"+a);
int t = i * j / a;//最小公倍数=两数相乘除以最大公约数
System.out.println(i+"和"+j+"的最小公倍数是:"+t);
}
public void gongYue2() {//求两数最大公约数和最小公倍数的方法2-更相减损法
System.out.println("请输入要进行判断的两个数");
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
int b=sc.nextInt();//a,b为要进行计算的两个数
int i = a;//i,j保留a,b的值
int j = b;
int x =0,y =1;//X为排序所用参数,Y为算法所用中间参数
if(a < b){ //进行排序,始终保持a为较大数
x = b;
b = a;
a = x;
}
while(a != b){
//保证tt1 是较大的数
if(a < b){
int temp = a;
a = b;
b = temp;
}
//双偶
if(a % 2 == 0 && b % 2 == 0){
a = a>>1;
b = b>>1;
y = y * 2;
//奇偶
}else if(a % 2 == 0 && b % 2 != 0){
a = a>>1;
//偶奇
}else if(a % 2 != 0 && b % 2 == 0){
b = b>>1;
//双奇
}else if(a % 2 != 0 && b % 2 != 0){
int temp = b;
b = a - b;
a = temp;
}
}
System.out.println(i+"和"+j+"的最大公约数是:"+b * y);
int t = (i * j) /( b * y);//最小公倍数=两数相乘除以最大公约数
System.out.println(i+"和"+j+"的最小公倍数是:"+t);
}
public int gongYue3(int a,int b){//穷举法
int x = a;//x,y保留a,b的值
int y = b;
int value=1;
int max;
int min;
if(a==b){
return a;
}
if(a>b){
max=a;
min=b;
}else{
max=b;
min=a;
}
for(int i=2;i<min;i++){
if(0==max%i && 0==min%i){
value=i;
}
}
System.out.println(x+"和"+y+"的最大公约数是:"+value);
int t = x*y /value;//最小公倍数=两数相乘除以最大公约数
System.out.println(x+"和"+y+"的最小公倍数是:"+t);
return value;
}
public int gongYue4(int a,int b,int c){//穷举法求三个数的最大公约和最小公倍
int x = a;//x,y,z保留a,b,c的值
int y = b;
int z = c;
int value=1;
int max;
int min;
int temp;
if(a==b&&b==c){
return a;
}
if(a<b) {
max=b;
min=a;
temp=c;
}
else if(b>c) {
max=a;
min=c;
temp=b;
}
else if(a>c){
max=a;
min=b;
temp=c;
}
else {
max=c;
min=b;
temp=a;
}
for(int i=2;i<min;i++){
if(0==max%i && 0==min%i&&0==temp%i){
value=i;
}
}
int i=max;
int t;//公倍数
while(true) {
if(i % a == 0 && i % b == 0 && i % c == 0) { //当三个数都可以被i整除时,跳出循环
t = i;
break;
}
i++;
}
System.out.println(x+"、"+y+"、"+z+"的最大公约数是:"+value);
System.out.println(x+"、"+y+"、"+z+"的最小公倍数是:"+t);
return value;
}
}
class Interface{ //界面
Test t=new Test();
public void inte() {
Scanner sc=new Scanner(System.in);
System.out.println("----- 请输入数字选择功能 : -----");
System.out.println("1-辗转相除法求两数最大公约数和最小公倍数");
System.out.println("2-更相减损法求两数最大公约数和最小公倍数");
System.out.println(" 3-枚举法法求两数最大公约数和最小公倍数 ");
System.out.println(" 4-求三个数的最大公约数和最小公倍数 ");
System.out.println(" 5-退出 ");
t.select=sc.nextInt();
}
}
public class Test {
public static int select=0;//功能选项
public static void main(String[] args) {
int a,b,c;
HomeWork h=new HomeWork();
Interface ii=new Interface();
Scanner sc=new Scanner(System.in);
ii.inte();
while(select!=5) {
switch(select) {
case 1:{
h.gongYue1();
ii.inte();
}
break;
case 2:{
h.gongYue2();
ii.inte();
}
break;
case 3:
{System.out.println("请输入要进行判断的两个数");
a=sc.nextInt();
b=sc.nextInt();
h.gongYue3(a, b);
ii.inte();
};
break;
case 4:
{
System.out.println("请输入要进行判断的三个数");
a=sc.nextInt();
b=sc.nextInt();
c=sc.nextInt();
h.gongYue4(a, b, c);
ii.inte();
};
break;
case 5:{
ii.inte();
};
break;
}
}
}
}
程序设计方法学作业(二)——求最大公约数和最小公倍数
最新推荐文章于 2023-01-11 11:18:16 发布