java 求两个数的最大公约数

3a. 编写计算“两个整数的最大公约数”程序。

//方法一:定义法
// 根据定义让i累加上去的到结果,缺点是:当数据大时循环的次数过大

package pro1.suanfa.whp;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class common_divisor {


	/**
	 * 计算两个数的公约数
	 * 方法一
	 * @param args
	 * @throws IOException
	 * @throws NumberFormatException
	 */
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		try {
			System.out.println("计算两个数的最大公约!!");
			System.out.println("请输入第一个正整数:");
			BufferedReader br1 = new BufferedReader(new InputStreamReader(
					System.in));
			int num1 = Integer.parseInt(br1.readLine());
			System.out.println("请输入第二个正整数:");
			BufferedReader br2 = new BufferedReader(new InputStreamReader(
					System.in));
			int num2 = Integer.parseInt(br2.readLine());
			if(num1>0&&num2>0)
			{
				int min;
				if (num1 < num2)// 或者int min=Math.min(num1, num2);
				{
					min = num1;
				} else {
					min = num2;
				}


				int Maxcommin_divisor = 1;
				for (int i = min; i >= 1; i--) {
					if (num1 % i == 0 && num2 % i == 0) { 
						Maxcommin_divisor = i;
						break;
					}
				}
				System.out.print("最大公约数是:" + Maxcommin_divisor);
			}else
			{
				System.out.print("输入的数不是正整数");
			}
		} catch (Exception e) {
			System.out.print("输入的数不是正整数");
		}
	}


}


方法二:欧几里德算法(辗转相除法):java求两个整数最大公约数

package pro1.suanfa.whp;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class common_divisor {

	/**
	 * 计算两个数的公约数
	 * 方法二
	 * @param args
	 * @throws IOException
	 * @throws NumberFormatException
	 */
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		try {
			System.out.println("计算两个数的最大公约!!");
			System.out.println("请输入第一个正整数:");
			BufferedReader br1 = new BufferedReader(new InputStreamReader(
					System.in));
			int num1 = Integer.parseInt(br1.readLine());
			System.out.println("请输入第二个正整数:");
			BufferedReader br2 = new BufferedReader(new InputStreamReader(
					System.in));
			int num2 = Integer.parseInt(br2.readLine());
			int Maxcommin_divisor;
			if(num1>0&&num2>0)
			{
				if(num1>num2){
					Maxcommin_divisor=common(num1,num2);
				}else
				{
					Maxcommin_divisor=common(num2,num1);
				}
				
				System.out.print("最大公约数是:" +Maxcommin_divisor);
			}else
			{
				System.out.print("输入的数不是正整数");
			}
		} catch (Exception e) {
			System.out.print("输入的数不是正整数");
		}
	}
	
	
	private static int common(int a,int b){
		if(a%b==0)
			return b;
		else
			return common(b,a%b);
	}

}

运行答案如下:

java 求两个数的最大公约数_第1张图片



你可能感兴趣的:(java编程)