Problem Description
输入两个正整数,求它们的最大公约数与最小公倍数。
Input
输入两个正整数,两个整数之间用空格分开。
数据保证在 int 范围内。
Output
第一行输出最大公约数;
第二行输出最小公倍数。
答案保证在 int 范围内。
Sample Input
64 48
Sample Output
16
192
先用原来做法做:
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner reader = new Scanner(System.in);
int n=reader.nextInt();
int m=reader.nextInt();
if(n>m)
{
int t;
t=n;n=m;m=t;
}
int max=0,min=n;
for(int i=n;i>=1;i--)
{
if(n%i==0&&m%i==0)
{
max=i;
break;
}
}
min=n*m/max;
System.out.println(min+" "+max);
reader.close();
}
}
接下来面向对象做法:
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner reader = new Scanner(System.in);
int m=reader.nextInt();
int n=reader.nextInt();
GysGbs gysGbs = new GysGbs (m,n);//引用GysGbs对象,在栈空间中。
int x=gysGbs.gys();
int y=gysGbs.gbs();//用x,y来接收对象的返回值。
System.out.println(x);
System.out.println(y);
reader.close();
}
}
class GysGbs//建立一个类,类名为GysGbs.
{
int m;
int n;//定义两个成员变量 ,m,n.
public GysGbs(int m,int n)//构造方法的建立
{
int a=Math.max(m, n);
int b=Math.min(m, n);
this.m=a;//将方法内的变量赋值给实体变量
this.n=b;
}
public int gys()//方法的建立
{
int a=m;
int b=n;
int flag=0;
for(int i=a;i>=1;i--)
{
if(a%i==0&&b%i==0)
{
flag=i;
break;
}
}
return flag;
}
public int gbs()
{
return m*n/gys();
}
}
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner reader =new Scanner(System.in);
int n=reader.nextInt();
int m=reader.nextInt();
MaxMin maxMin=new MaxMin(n,m);
int x=maxMin.Max();
int y=maxMin.Min();
System.out.printf("%d\n%d\n",x,y);
reader.close();
}
}
class MaxMin
{
int n;
int m;
public MaxMin(int n,int m)
{
this.n=Math.max(n, m);
this.m=Math.min(n, m);
}//构造方法
public int Max()
{
int n=this.n;
int m=this.m;
int flag=0;
for(int i=m;i>=1;i--)
{
if(n%i==0&&m%i==0)
{
flag=i;
break;
}
}
return flag;
}//返回最大公因数
public int Min()
{
int flag=0;
flag=n*m/Max();
return flag;
}//返回最小公倍数
}