刚学c。为什么输入后,没有输出。(这里在求最大公约数与最小公倍数)。有没有懂的程序员,解释一下

img

img


刚学c。为什么输入后,没有输出。(这里在求最大公约数与最小公倍数)。有没有懂的程序员,解释一下。

有几处地方需要修改 ,但修改之后算法的效率也不是很高。

修改如下:

参考链接:



#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;
    
    
} 

img

每次循环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;
}

希望这个解释对你有帮助!如果还有其他问题,请随时提问。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^