日期:2014-05-20  浏览次数:20727 次

求公约数与公倍数(关于重载的方法)
一个关于求a 和b的最大公约数与最小公倍数;
问题:假如输入 3和7,为何不能求出最小公倍数???

package package1;

import java.util.Scanner;


class 最大公约数{
public int f(int a,int b){
if(a<b){
int m;
m=a;
a=b;
b=m;
}
if(a%b==0) return b;
else return f(b,a%b);
}
}

public class 最小公倍数 extends 最大公约数{
public int f(int a,int b){
int m;
  m=super.f(a,b);
  System.out.println(m);

  return ((a*b)/m);
   

}
public static void main(String[] args) {
最大公约数 gcd=new 最大公约数();
最小公倍数 gcd1=new 最小公倍数();
Scanner sc1=new Scanner(System.in);
Scanner sc2=new Scanner(System.in);

System.out.println("请输入两个正整数:");

int a=sc1.nextInt();
int b=sc2.nextInt();

int m=gcd.f(a, b);
System.out.println(a+"和"+b+"的最大公约数为:"+m);

int n=gcd1.f(a, b);
System.out.println(a+"和"+b+"的最小公倍数为:"+n);



}

}
假如输入 3和7,为何不能求出最小公倍数???

------解决方案--------------------
探讨

引用:

引用:

题目要求父类求出最大公约数,子类必须重写这个方法求出其最小公倍数!并且调用父类的方法然后将乘积(a*b)/m返回。
转换为非递归
public class GongBeishu extends Gongyueshu{
public int f(int m,int n){
int k=super.f(m, n);
return m*n/k;
}
public static void main(String[] args) {
GongBeishu g=new GongBeishu();
System.out.println(g.f(15, 9));
}
}
class Gongyueshu{
//非递归
public int f(int m,int n){
int t;
if(m<n){
t=m;
m=n;
n=t;
}
int yushu=m%n;
while(yushu!=0){
yushu=m%n;
m=n;
n=yushu;
}
return m;
}
}
这是哪里的题目?中国人写的书还是外国人写的书?



当然是中国人写的书了;
原题目是这样的:
写一个类,该类有一个方法public int f(int a,int b),该方法返回a和b的最大公约数……