求a和b的最大公约数

img

img


首先求出a和b中的最小值,再用for循环来求最大公约数,帮忙看看错在哪吧,一直得不出结果

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7522747
  • 这篇博客也不错, 你可以看下按先后大小的顺序输出a和b,用函数处理,用指针类型的数据作函数参数
  • 除此之外, 这篇博客: C语言经典100例精选中的 输入两个正整数a和b,求其最大公约数和最小公倍数。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    1. 如果b等于0,计算结束,a就是最大公约数
    2. 否则,计算a除以b的余数,让a等于b,而b等于那个余数;
    3. 回到第一步

    求最大公约数——辗转相除法
    最小公倍数=输入的两个数之积除于它们的最大公约数

    #include <stdio.h>
    /*
    求最大公约数——辗转相除法
    最小公倍数=输入的两个数之积除于它们的最大公约数
    a=12 b=18 t=12
    a=18 b=12 t=6
    a=12 b=6  t=0
    a=6  b=0 循环结束
    */
    int main(){
        int a,b,n;
    	scanf("%d %d",&a,&b);
    	n=a*b;
    	while(b!=0){
    		int t = a % b;
    		a = b;
    		b = t;
    		printf("a=%d b=%d t=%d\n", a,b,t);
    	}
    
    	printf("最大公约数是%d\n",a);
    	printf("最小公倍数是%d\n",n/a);
    
    }
    

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

参考一下

#include <stdio.h>

int main() {
    int a, b, min, i, gcd;

    printf("请输入两个正整数a和b:\n");
    scanf("%d%d", &a, &b);

    // 求a和b中的最小值
    min = (a < b) ? a : b;

    // 从最小值开始循环
    for (i = min; i >= 1; i--) {
        // 如果i同时是a和b的约数,则i为它们的最大公约数
        if (a % i == 0 && b % i == 0) {
            gcd = i;
            break;
        }
    }

    printf("%d和%d的最大公约数为%d\n", a, b, gcd);

    return 0;
}