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

今天上软件工程课时老师让用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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发哥1997

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值