有几处地方需要修改 ,但修改之后算法的效率也不是很高。
修改如下:
参考链接:
#include <stdio.h>
int main(void){
int m,n;
int i,x;
scanf("%d%d",&m,&n);
// https://blog.csdn.net/m0_66304425/article/details/123920248
// 将i的赋值部分提前,这个if-else语句用于将两个数中较小的数赋值给i
if(m>=n){
i=n;
}else{
i=m;
}
//求最大公约数
for(;;i--){
int c=m%i;
int d=n%i;
if(c==0&&d==0){
printf("%d ",i);
break;
}
}
// 同上,将x的赋值部分提前,这个if-else语句用于将两个数中较小的数赋值给x
if(m>=n){
x=n;
}
if(m<n){
x=m;
}
// 求最小公倍数
while(2){
int e=x%m;
int f=x%n;
if(e==0&&f==0){
printf("%d",x);
break;
}
// 这里在判断完是否为最小公倍数后,再加x++
x++;
}
return 0;
}
每次循环i和x的值不变,死循环了。
【以下回答由 GPT 生成】
你的代码中存在一个问题,就是没有对gcd
变量进行初始化。虽然你在for循环中求解了最大公约数并将其赋值给了gcd
变量,但是如果for
循环中的条件不满足,那么gcd
将保持未定义的状态。在计算最小公倍数的时候,由于没有定义gcd
的值,所以会出现错误。
为了解决这个问题,你可以在定义gcd
变量的时候将其初始化为1,如下所示:
int gcd = 1;
这样,即使for
循环中的条件不满足,gcd
变量也会有一个初始的值,从而避免了未定义的情况。
修改后的代码如下:
#include <stdio.h>
int main() {
int num1, num2;
int i, gcd = 1, lcm;
printf("请输入两个整数:");
scanf("%d %d", &num1, &num2);
// 计算最大公约数
for (i = 1; i <= num1 && i <= num2; ++i) {
if (num1 % i == 0 && num2 % i == 0)
gcd = i;
}
// 计算最小公倍数
lcm = (num1 * num2) / gcd;
printf("最大公约数:%d\n", gcd);
printf("最小公倍数:%d\n", lcm);
return 0;
}
希望这个解释对你有帮助!如果还有其他问题,请随时提问。
【相关推荐】