您的位置:首页 > 其它

求最大公约数和最小公倍数引发的一些问题

2014-04-17 11:50 218 查看
今天上软件工程课时老师让用PAD图画出求两个整数的最小公倍数和最小公约数的算法。

果断想到了辗转相除法,然后就继续了。。。。。。。。

碰到的第一个问题是:

一下子转不过来x ,y;这两个值该怎么赋值。

一开始想的是:int r=x%y;用r来作为判断标准:

当r等于零时就不用while循环。除数就为最大公约数,最小公倍数则为:x*y/最大公约数

当r不等于零时,则用while(r!=0){

int temp=x/y;

x=y;

y=temp;

}

来求得最大公约数。再求得最小公倍数:x*y/最大公约数

显然:这是不能完成的,因为此时x与y的值是辗转相除后的值,不是一开始输入的x,y值。而求最小公倍数是要求x,y是开始输入的两个整数值的乘积再除于最大公约数

碰到的第二个问题是:

这里使用的是publicstatic void  qiu(int x,int y)来求解最大公约数和最小公倍数。不解的是这里为什么要定义成静态的?

原来是因为:如果不设置为静态的话,就要用对象来调用该方法。如果一个方法不是静态的,则要先实例化该类,比如要这样 qiu t=new qiu(); 
然后才能调用

下面则为解决这两个困惑后的代码:

import java.util.Scanner;

public class GBS {

public static void main(String[] args) {
// TODO Auto-generated method stub

Scanner s=new Scanner(System.in);
int t=0;
int x=s.nextInt();
int y=s.nextInt();
if(x<y){
int temp=x;
x=y;
y=temp;

qiu(x, y);

}

else{
qiu(x, y);

}

}

public static void qiu(int x, int y) {
int t=0;
int max=x;
int min=y;
int r=max%min;
if(r==0){
t=max/min;
System.out.println("最大公约数为:"+min);
System.out.println("最小公倍数为:"+(x*y)/min);

}
else {
while(r!=0){
t=max/min;
r=max%min;
max=min;
min=r;

}
System.out.println("最大公约数为:"+max);
System.out.println("最小公倍数为:"+(x*y)/max);

}

}

}


控制台输入:12   15

12

15

最大公约数为:3

最小公倍数为:60
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: