输入两个整数,计算并输出它们的最大公约数

两个整数可以是正数、零和负数,两个整数的位数都不到 20 位。最大公约数必须是正整数。

注:若两个整数都为 0,则最大公约数规定为 1。

输入样例1
25 -30
输出样例1
5

#include <stdio.h>

void swap(long long *a, long long *b)
{
    long long t = *a;
    *a = *b;
    *b = t;
}

long long gcd(long long a, long long b)
{
    if (a == 0 || b == 0)
        return 1;
    if (a < 0)
        a = -a;
    if (b < 0)
        b = -b;
    if (a > b)
        swap(&a, &b);
    long long r = b % a;
    if (r == 0)
        return a;
    return gcd(r, a);
}

int main()
{
    long long a, b;
    scanf("%lld%lld", &a, &b);
    printf("%lld", gcd(a, b));
    return 0;
}

代码如下
如果对你有帮助,还请点个采纳!

#include<stdio.h>
#include <math.h>
int main()
{
    int n, m;
    int r = 0;
    scanf("%d%d", &m, &n);
    if (m == n && m == 0)
    {
        printf("1\n");
    }
    else
    {
        while (r = m % n)
        {
            m = n;
            n = r;
        }
        printf("%d\n", abs(n));
    }
    
    return 0;
}

个人写的求最大公约数的文章,可供参考:
https://blog.csdn.net/qq_51646682/article/details/122491237
代码如下:

#include<stdio.h>

int main(){
    int a,b,num1,num2,temp;
    printf("请输入两个整数:\n");
    scanf("%d%d",&num1,&num2);
    //如果num1<num2,交换num1和num2的值
    if(num1<num2)
    {
        temp = num1;
        num1 = num2;
        num2 = temp;
    }
    //另取两个变量a,b 分别赋值为num1,num2
    a = num1;
    b = num2;
    
    //辗转相除法,直到b为0为止
    while(b!=0){
         temp=a%b;
        a = b;
        b = temp;
    }
    printf("最大公约数:%d\n",a);
    //printf("最小公倍数:%d\n",num1*num2/a);
    
    return 0;
}


以上仅供参考,希望对题主有所帮助!