问题描述
求两个整数的最大公约数。
输入描述:
第一行输入第一个数
第二行输入第二个数
输出描述:
输出格式为:
- 有公约数的情况下,输出: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));
}
}
}
}