QQ登录

只需一步,快速开始

开启左侧

用C++实现更相减损术

[复制链接]
18062232277 发表于 2024-4-18 08:50:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
在C++中实现更相减损术也很直接。下面是一个简单的C++函数,用于计算两个整数的最大公约数(GCD):
cpp复制代码

#include <iostream>  

  

int gcd_subtraction(int a, int b) {  

    // 确保a是较大的数  

    if (a < b) {  

        std::swap(a, b);  

    }  

  

    // 循环直到a和b相等  

    while (a != b) {  

        if (a > b) {  

            a -= b;  

        } else {  

            b -= a;  

        }  

    }  

  

    // 返回最大公约数  

    return a;  

}  

  

int main() {  

    int num1 = 84;  

    int num2 = 56;  

    int result = gcd_subtraction(num1, num2);  

    std::cout << "The greatest common divisor of " << num1 << " and " << num2 << " is: " << result << std::endl;  

    return 0;  

}

这段代码定义了一个gcd_subtraction函数,它接受两个整数a和b作为参数,并返回它们的最大公约数。在main函数中,我们调用了这个函数,并打印了结果。
请注意,这个函数假设输入的a和b都是正整数。如果输入的数可能包括负数或零,你需要在函数中添加适当的错误检查和处理逻辑。
同样地,虽然更相减损术在原理上是可行的,但在实际应用中,欧几里得算法(辗转相除法)通常更加高效。以下是使用欧几里得算法的C++实现:
cpp复制代码

#include <iostream>  

  

int gcd_euclidean(int a, int b) {  

    while (b != 0) {  

        int temp = b;  

        b = a % b;  

        a = temp;  

    }  

    return a;  

}  

  

int main() {  

    int num1 = 84;  

    int num2 = 56;  

    int result = gcd_euclidean(num1, num2);  

    std::cout << "The greatest common divisor of " << num1 << " and " << num2 << " is: " << result << std::endl;  

    return 0;  

}

在这个实现中,我们使用了一个while循环来重复执行取余操作,直到余数为0。此时,除数(保存在变量a中)就是最大公约数。
{38ADC14A-5160-4107-B9E3-10F290DBB692}.jpg

客服热线
400-1234-888 周一至周日:09:00 - 21:00
公司地址:襄阳市樊城区长虹路现代城5号楼188

创客帮MAKER.BAND青少年创客创意社区是一个融教育、科技、体育资讯为一体的综合服务平台,专注于教育创新、专注于科技体育、专注于教育资讯。

Powered by Discuz! X3.4 © 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表