代码自测(输入任意两个整数,输出他们的最大公约数和最小公倍数 )-2021-7-16

输入任意两个整数,输出他们的最大公约数和最小公倍数

package com.qianfeng.day04;

import java.util.Scanner;

public class Work04 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		int a,b;	//输入的两个数
		int as,bs;	//备份两个数
		
		System.out.print("请您输入两个整数:");
		a = input.nextInt();
		b = input.nextInt();
		as = a;
		bs = b;
		
		//方法一:穷举法
		System.out.println("方法一: 穷举法");
		for(int i = (a>b?b:a); i >= 1; i--) {
			if(a % i == 0 && b % i == 0) {
				System.out.println("最大公因数为:" + i);
				break;
			}
		}
		for (int i = (a>b?a:b); i <= a*b; i++) {
			if(i % a == 0 && i % b == 0) {
				System.out.println("最小公倍数为:" + i + "\n");
				break;
			}
		}
		
		//方法二:相减法
		int sum;		//两数之和
		sum = a * b;
		System.out.println("方法二:相减法");
		while (true) {
			if(a != b) {
				if (a > b) {
					a = a - b;
				} else {
					b = b - a;
				}
			} else {
				break;
			}
		}
		System.out.println("最大公因数为:" + a);
		System.out.println("最小公倍数为:" + sum/a + "\n");
		
		//方法三:辗转相除法
		System.out.println("方法三:辗转相除法");
		int remainder1,remainder2 = 1,remainder = 1; 		//用于储存余数
		int max,min;		//储存两个数的最大和最小值
		int gcd,lcm;		//分别代表最大公因数和最小公倍数
		max = as>bs?as:bs;
		min = as<bs?as:bs;
		remainder1 = max % min;
		if (remainder1 != 0) {
			remainder2 = min % remainder1;
		}
		if (remainder1 == 0) {
			gcd = min;
		} else if(remainder2 == 0) {
			gcd = remainder1;
		} else {
			while(remainder != 0) {
				remainder = remainder1 % remainder2;
				remainder1 = remainder2;
				remainder2 = remainder;
			}
			gcd = remainder1;			
		}
		lcm = sum/gcd;
		System.out.println("最大公因数为:" + gcd);
		System.out.println("最小公倍数为:" + lcm + "\n");
		
		input.close();
		
	}
}


解释:
方法一:穷举法
最大公因数的取值范围一定在,1到两个数之间小的那一个范围内
最小公倍数的取值方位一顶在,两个数之间最大的哪一个到两数相乘范围内
然后直接通过i++的方式寻找,进行枚举

方法二:相减法

  1. 两数中最大的那个数减去最小的那个数,得到了一个值
  2. 然后让得到的这个值去替换两个数中大的那个
  3. 然后比较替换后的两个数,重复第一个步骤
  4. 当两个数相等的时候即为最大公因数
  5. 最后将刚开始的两个数相乘再除以最大公因数,之后得到的那个数就是最小公倍数

方法三:辗转相除法

  1. 判断两个数的最大值,让最大值除去最小值然后得到它的余数1
  2. 用两个数中的最小值除以余数1,得到余数2
  3. 让余数1除以余数2得到余数3
  4. 重复上述步骤,当哪一个余数为零,那么它的除数就是最大公因数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值