Java实现求两个整数的最大公约数

问题描述

求两个整数的最大公约数。

输入描述:

第一行输入第一个数

第二行输入第二个数

输出描述:

输出格式为:

  • 有公约数的情况下,输出:The result is 最大公约数
  • 无公约数的情况下,输出:No result

Java实现

方法一:暴力枚举

// 导入Scanner类,用于从控制台读取输入
import java.util.Scanner;public class Main
{
    // 定义一个名为gcd的静态方法,用于计算两个整数的最大公约数
    public static int gcd(int a, int b)
    {
        // 找出a和b中的较小值,作为循环的起始点
        int min = a < b ? a : b;// 从min开始递减循环,直到1
        for (int i = min; i >= 1; i--)
        {
            // 如果i能同时整除a和b,则i是a和b的最大公约数
            if (a % i == 0 && b % i == 0)
            {
                // 返回找到的最大公约数
                return i;
            }
        }
        //无公约数,返回0
        return 0;
    }public static void main(String[] args)
    {
        // 创建一个Scanner对象,用于从控制台读取输入
        Scanner in = new Scanner(System.in);// 当控制台还有整数输入时,继续循环
        while (in.hasNextInt())
        {
            // 读取第一个整数
            int num1 = in.nextInt();// 读取第二个整数
            int num2 = in.nextInt();// 调用gcd方法计算两个数的最大公约数
            // 如果结果为0,则输出"No result"
            if (gcd(num1, num2) == 0)
            {
                System.out.println("No result");
            }
            else
            {
                // 否则,输出计算得到的最大公约数
                System.out.println("The result is " + gcd(num1, num2));
            }
        }
    }
}

方法二:辗转相除法

// 导入Scanner类,用于从控制台读取输入
import java.util.Scanner;public class Main
{
    // 定义一个名为gcd的静态方法,用于计算两个整数的最大公约数
    public static int gcd(int a, int b)
    {
        // 使用辗转相除法计算最大公约数
        // 首先计算a除以b的余数
        int r = a % b;// 当余数不为0时,继续循环
        while(r != 0)
        {
            // 将b的值赋给a
            a = b;
            // 将余数的值赋给b
            b = r;
            // 再次计算新的a除以b的余数
            r = a % b;
        }// 当余数为0时,b的值就是最大公约数
        return b;
    }public static void main(String[] args)
    {
        // 创建一个Scanner对象,用于从控制台读取输入
        Scanner in = new Scanner(System.in);// 使用while循环,当输入还有整数时继续执行
        // hasNextInt()方法用于检查是否还有下一个整数输入
        while(in.hasNextInt())
        {
            // 读取第一个整数
            int num1 = in.nextInt();
            // 读取第二个整数
            int num2 = in.nextInt();// 如果出现其中一个数为0,则无公约数,输出"No result"
            if(num1 == 0 || num2 == 0)
            {
                System.out.println("No result");
            }
            else
            {
                // 如果两个数都非0,则调用gcd方法计算它们的最大公约数,并输出结果
                System.out.println("The result is " + gcd(num1, num2));
            }
        }
    }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值