文章

230

粉丝

165

获赞

374

访问

113.7k

头像
辗转相除法求最大公约数 题解:
P7124 北京理工大学2025年机试题
发布于2026年3月15日 11:42
阅读数 115

#include <stdio.h>

// 过程化封装:手动实现辗转相除法(含分步输出),禁止调用内置gcd函数
int gcd(int a, int b) {
    // 步骤1:确保a >= b,若a < b则交换并标注第一步的计算
    int original_a = a, original_b = b;
    if (a < b) {
        int temp = a;
        a = b;
        b = temp;
    }

    // 步骤2:显式实现辗转相除循环,逐行输出过程
    while (b != 0) {
        int quotient = a / b;    // 商
        int remainder = a % b;   // 余数
        printf("%d = %d * %d + %d\n", a, b, quotient, remainder);

        // 更新a和b,进入下一轮计算
        a = b;
        b = remainder;
    }

    // 返回最终的最大公约数
    return a;
}

int main() {
    int num1, num2;
    // 读取输入的两个整数
    if (scanf("%d %d", &num1, &num2) != 2) {
        printf("Input error!\n");
        return 0;
    }

    // 输入合法性校验:必须均为正整数
    if (num1 <= 0 || num2 <= 0) {
        printf("Input error!\n");
        return 0;
    }

    // 调用gcd函数(手动实现逻辑,无内置函数)
    int result = gcd(num1, num2);
    // 输出最终结果
    printf("GCD = %d\n", result);

...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发