2301_80631336 2023-11-09 10:50 采纳率: 0%
浏览 6

最大公约数和最小公倍数求解不知道错哪了

#include<stdio.h>int gcd(int a, int b){ int x; for(x=a;x>0;x--) { if(a%x==0&&b%x==0) return x; }}int lcm(int a, int b){ int i,t,y=1,min,max; if(a>b) min=b,max=a; else min=a,max=b; t=min; if(min==1) return max; if(min==2) { if(max%2==0) return max; else return 2max; } else { for(i=2;i<=min/2;i++) { if(min%i==0&&max%i==0) { min=min/i; max=max/i; y=i; } } y=yminmax; } return y;}int main(){ int n, m, gys, gbs; int gcd(int a, int b); int lcm(int a, int b); scanf("%d%d", &n, &m); gys= gcd(n, m); gbs= lcm(n, m); printf("%d %d\n", gys, gbs); return 0;}

  • 写回答

2条回答 默认 最新

  • 社区专家-Monster-XH 2023-11-09 11:04
    关注

    在 lcm 函数中有一个错误,return 2max; 这行代码应该是 return 2*max

    #include <stdio.h>
    
    int gcd(int a, int b) {
        int x;
        for (x = a; x > 0; x--) {
            if (a % x == 0 && b % x == 0)
                return x;
        }
        return 1; // 应该有一个返回值以处理所有情况,比如 a 和 b 都是质数
    }
    
    int lcm(int a, int b) {
        int max = (a > b) ? a : b;
        int min = (a > b) ? b : a;
        if (min == 1) return max;
    
        int i, y = 1;
        for (i = 2; i <= min / 2; i++) {
            if (min % i == 0 && max % i == 0) {
                min = min / i;
                max = max / i;
                y = y * i; // 应该是累乘 i
            }
        }
        return y * min * max;
    }
    
    int main() {
        int n, m, gys, gbs;
        scanf("%d%d", &n, &m);
        gys = gcd(n, m);
        gbs = lcm(n, m);
        printf("%d %d\n", gys, gbs);
        return 0;
    }
    
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 11月9日