【问题描述】输入两个正整数a和b(0<a,b<1000000),求出其最大公约数和最小公倍数并输出。 【输入文件】从标准输入读取一行,是两个整数a和b,以空格分隔。 【输出文件】向标准输出打印以空格分隔的两个整数,分别是a、b的最大公约数和最小公倍数。在输出末尾要有一个回车符。 【输入样例】12 18 【输出样例】6 36 【样例说明】12和18的最大公约数是6,最小公倍数是36. 【评分标准】结果正确则该测试点得满分,否则该测试点得0分。
该题在基于第一题的基础上,没有出现新的知识,逻辑理解起来也较为简单,通过遍历寻找最大公约数和最小公倍数。 代码如下:
package work2; import java.util.Scanner; public class gongyuegongbei { public static void main(String[] args) { Scanner input = new Scanner(System.in); int i = input.nextInt(); //读取两个输入 int j = input.nextInt(); int gongyue=1,gongbei=1,m,n,min,max; //初始化存储公约数和公倍数的值 if(i<j) { //寻找两数中的最小值、最大值 min = i; max = j; } else { min=j; max = i; } for(m=1;m<=min;m++) { //寻找公约数直至达到两数中的最小值 if(i%m==0 && j%m==0) gongyue = m; //每次寻找到均被重新赋值,最后存储的为公约数的最大值 } for(n=max;;n++) { //从两数中的最大值开始寻找最小公倍数 if(n%i == 0 && n%j == 0) { gongbei = n; //当找到一个公倍数时即为最小公倍数,退出遍历 break; } } System.out.println(gongyue+" "+gongbei+"\n"); } }