C 加分题目

用C实现一个函数 int gcd(int a, int b) 求解两个整数的最大公约数,算法步骤是,用a ,b中的大值减去小值得到临时值c,然后再用c和a,b中的最小值进行计算,直到c和a,b中的最小值相等。一个例子参考附件。

提交代码和运行截图。

#include <stdio.h>

int gcd(int x, int y)
{
    int sum1 = 1;
    //先判断 x y是否都是偶数
    while ((x % 2 == 0) && (y % 2 == 0))
    {
        sum1 *= 2;
        x = x / 2;
        y = y / 2;
    }

    while (1)
    {
        //保证,被减数大于减数,不然就交换顺序
        if (x < y)
        {
            int temp = x;
            x = y;
            y = temp;
        }

        //差放在s中
        int s = x - y;
        //判断差 和 减数 是否相等,如果是,跳出循环。
        if (y == s)
            break;
        else
        {
            x = y;
            y = s;
        }
    }
    //最大公约数就是约掉的若干个2的积与第二步中等数(减数=差)的乘积
    return y * sum1;
}

int main()
{
    int a = 98;
    int b = 63;
    int gcdnum = gcd(a, b);
    printf("%d  %d的最大公约数为 %d\n", a, b, gcdnum);
    return 0;
}

posted @ 2022-12-22 09:14  acacacac  阅读(20)  评论(0编辑  收藏  举报