高分悬赏:Java语言计算三个数的最大公约数和最小公倍数怎么计算的呢
高分悬赏:Java语言计算三个数的最大公约数和最小公倍数怎么计算的呢
这里有一篇可以参考哈:https://blog.csdn.net/gpdkq127/article/details/82527911
这里贴代码不太好阅读,完整的博客看起来更清晰。
import java.util.Scanner;
public class Muitipie {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("input x :");
int x = in.nextInt();
System.out.print("input y :");
int y = in.nextInt();
int z = Method(x,y);
System.out.println("辗转相除法:");
System.out.println("divisor : "+z);
System.out.println("multiple : "+(x*y/z));
System.out.println("相减法:");
z = Subtraction(x,y);
System.out.println("divisor : "+z);
System.out.println("multiple : "+(x*y/z));
System.out.println("穷举法:");
z = divisor(x,y);
System.out.println("divisor : "+divisor(x,y));
z=multiple(x,y);
System.out.println("multiple : "+multiple(x,y));
}
//辗转相除法:返回公约数
public static int Method(int x,int y){
int a,b,c;
a=x;
b=y;
while(b!=0){
c=a%b;
a=b;
b=c;
}
return a;
}
//相减法
public static int Subtraction(int x,int y){
while(x!=y){
if(x>y){
x=x-y;
}
else{
y=y-x;
}
}
return x;
}
//穷举法 求公约数
public static int divisor(int x,int y){
int z;
for(z=x;z>0;z--){
if(x%z==0&&y%z==0){
break;
}
}
return z;
}
//求公倍数
public static int multiple(int x,int y){
int z;
for(z=x;;z++){
if(z%x==0&&z%y==0){
break;
}
}
return z;
}
}
package yrq.play;
import java.util.Scanner;
public class Text{
private static int x;
private static int y;
private static int z;
public static void main(String [] arrgs){
meun();
}
public static void meun(){
System.out.println("您要选择求最大公约数(输入0)还是最小公倍数(输入1)?");
Scanner scanner = new Scanner(System.in);
int or=scanner.nextInt();
if (or==0){
System.out.println("请选择序号:1.穷举法;2.欧几里得算法;3.辗转相减法");
int or2=scanner.nextInt();
if(or2==1){
addNum();
jisuan1();
meun();
}
else if(or2==2){
addNum();
jisuan2();
meun();
}
else if(or2==3){
addNum();
int bigDiv = getBigDiv(x, y);
int bigDiv1 = getBigDiv(bigDiv, z);
System.out.println("最大公约数为:"+bigDiv1);
meun();
}
else {
System.out.println("没有该选项");
meun();
}
}
else if(or==1){
System.out.println("请选择序号:1.欧几里得算法;2.穷举法");
int or3=scanner.nextInt();
if(or3==1){
addNum();
int smallMul = getSmallMul(x, y);
int smallMul1 = getSmallMul(smallMul, z);
System.out.println("最小公倍数为"+smallMul1);
meun();
}
else if(or3==2){
addNum();
int max=x>y?x:y;
max=max>z?max:z;
for (;;max++){
if(max%x==0&&max%y==0&&max%z==0){
System.out.println("最小公倍数为"+max);
meun();
}
}
}
else {
System.out.println("没有该选项");
meun();
}
}
else{
System.out.println("没有此选择");
meun();
}
}
public static void addNum(){
System.out.println("请输入要求的3个数");
Scanner scanner=new Scanner(System.in);
x=scanner.nextInt();
y=scanner.nextInt();
z=scanner.nextInt();
}
public static int getSmallMul(int a, int b) {// 求两个数的最小公倍数
return (a * b) / getBigDiv(a, b);
}
public static int getBigDiv(int a, int b) {// 求两个数的最大公约数
if (b == 0)
return a;
return getBigDiv(b, a % b);
}
public static void jisuan1(){
int j=1;
for(int i=1;i<=x&&i<=y&&i<=z;i++) {
if (x % i == 0 && y % i == 0 && z % i == 0) {
j = i;
}
}
System.out.println("这三个数的最大公约数为:" +j);
}
public static void jisuan2(){
int j=0;
while (y != 0) {
j=x%y;
x=y;
y=j;
}
j=0;
while (z!=0){
j=x%z;
x=z;
z=j;
}
System.out.println("这三个数的最大公约数为:" +x);
}