这个有什么问题啊 ??

img


为什么这个的输出有问题啊?这个定义的函数有点错,能够编译但答案不对,这个求公约数

你这代码问题很多
1.if没加括号,导致c*i不管if进不进它都执行
2.当进入循环的时候i并没有退回2,而是继续自增,导致错误
3.你这代码效率很低,搜一搜辗转相除法

感觉思路完全不对啊,效率也非常低
按你的逻辑,修改如下:

#include <stdio.h>
int gcd(int a,int b)
{
    int m=a,n=b;
    int i,c=1;
    for(i=2;i<=m&&i<=n;i++)
    {
        if(a%i==0 && b%i==0)
        {
            a/=i;
            b/=i;
            c*=i;
            i--;
        }
    }
    printf("%d",c);
    return c;
}

int main()
{
    int a,b;
    scanf("%d%d",&a,&b);
    gcd(a,b);
}


#include<stdio.h>
int main()
{
    int a = 0;
    int b = 0;
    printf("请任意输入两个数:");
    scanf("%d%d", &a, &b);
    while((a-b) != 0)
    {
        if(a>b)
            a = a-b;
        else
            b = b-a;
    }
    printf("最大公约数为:%d\n", b);
    return 0;
}