问题描述:
本题目要求读入2个正整数A和B,然后输出它们的最大公约数和最小公倍数。
输入格式:
输入在一行中给出2个不超过10000的正整数A和B。
输出格式:
对每一组输入,在一行中输出最大公约数和最小公倍数,用逗号分隔。
输入样例:
2 3
输出样例:
1,6
思路:
- 首先,通过
scanf
函数从用户输入中读取两个整数a
和b
。 - 接下来,通过两个
if
语句判断a
和b
中的最大值,将其存储在变量max
中。 - 然后,通过一个
while
循环使max
成为a
和b
的公倍数。在这个循环中,如果max
不能被a
或b
整除,就增加max
的值,直到找到一个可以被a
和b
整除的数。 - 接着,通过一个
while
循环计算a
和b
的最大公约数 (GCD)。这个循环使用了欧几里得算法,该算法的基本思想是:GCD(a, b) = GCD(b, a mod b)。在这个循环中,如果b
能被a
整除,就跳出循环。否则,将a
的值赋给b
,将b
除以a
的余数赋给a
。 - 最后,通过
printf
函数输出计算得到的最大公约数a
和最小公倍数max
。
代码:
#include<stdio.h>
int main(){
int a,b;
scanf("%d %d",&a, &b);
int flag = 0;
int r;
int max = 0;
if(a > b) max = a;
if(b > a) max = b;
while(max % a != 0 || max % b != 0){
max++;
}
while(flag == 0){
r = b % a;
if(r == 0) break;
b = a;
a = r;
}
printf("%d,%d",a,max);
}
效果截图: