「已注销」 2022-02-01 19:27 采纳率: 83.3%
浏览 597
已结题

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

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

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

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

  • 写回答

3条回答 默认 最新

  • _GX_ 2022-02-01 19:49
    关注
    #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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • 慕雪华年 C/C++领域新星创作者 2022-02-01 19:57
    关注

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

    #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;
    }
    
    评论
  • Code_流苏 C/C++领域优质创作者 2022-02-01 20:02
    关注

    个人写的求最大公约数的文章,可供参考:
    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;
    }
    
    
    

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

    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月9日
  • 已采纳回答 2月1日
  • 创建了问题 2月1日

悬赏问题

  • ¥15 求日版华为b610s-77a 官方公版固件,有偿
  • ¥15 关于#java#的问题,请各位专家解答!(相关搜索:java程序)
  • ¥15 linux tsi721的驱动编译后 insmod 提示 报错
  • ¥20 multisim测数据
  • ¥15 求无向连通网的所有不同构的最小生成树
  • ¥15 模拟器的framebuffer问题
  • ¥15 opencv检测轮廓问题
  • ¥15 单点式登录SSO怎么爬虫获取动态SSO_AUTH_ACCESS_Token
  • ¥30 哈夫曼编码译码器打印树形项目
  • ¥20 求完整顺利登陆QQ邮箱的python代码