大家好,又见面了,我是你们的朋友全栈君。 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。方法一:短除法理论参考:百度知道 #include
int main() {
int m, n; // 两个输入的数
int x = 1, y; // x 是最大公约数,y是最小公倍数
int i = 2; // 累乘因子,从 2 开始
printf("请输入 m 和 n:\n");
scanf("%d%d", &m, &n);
// 将输入的两个数调整位置,m 是较大的那个数,n 是较小的那个数
if (m < n) {
m = m + n;
n = m - n; // m(m + n) - n(n) = m
m = m - n; // m(m + n) - n(m) = n
}
if (m % n == 0) {
// 两个数成倍数
printf("最大公约数:%d\n最小公倍数:%d\n", n, m);
} else {
// 不成倍数
// 计算最大公约数
while (i < n) {
// 当累乘因子小于较小值时,继续计算
if (m % i == 0 && n % i == 0) {
// 同时为两个数的乘法因子
m /= i;
n /= i;
x *= i;
} else {
i++;
}
}
// 计算最小公倍数
y = x * m * n;
printf("最大公约数:%d\n最小公倍数:%d\n", x, y);
}
}方法二:遍历法# include
int main()
{
int m, n; // 两个输入数
int x, y; // x 为最大公约数,y 为最小公倍数
int min, max; // max 为两个输入数中,较大的一个,min 为较小的一个
int i; // 用于 for 循环遍历
printf("请输入 m 和 n:\n");
scanf("%d %d", &m, &n);
min = m > n ? n : m;
max = m > n ? m : n;
x = 1; // 公约数初始化设为 1
if (max % min == 0) {
// 两个数是倍数关系
printf("最大公约数:%d\n最小公倍数:%d\n", min, max);
} else {
// 不成倍数
// 寻找最大公约数
for (i = 1; i |