对于求两个数的最大公约数gcd 可以采用欧几里得算法,也叫辗转相除法来快速计算
定理:
- 如果𝑏=0,则GCD(𝑎,𝑏)=𝑎
- 如果𝑏≠0,则GCD(𝑎,𝑏)=GCD(𝑏,𝑎%𝑏)
证明过程先略了
代码如下
#include <iostream>
// 自定义GCD函数
int gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
int main() {
int a, b, c;
std::cin >> a >> b >> c;
// 找出最大值
int hypotenuse = std::max({a, b, c});
int leg1, leg2;
if (hypotenuse == a) {
leg1 = b;
leg2 = c;
} else if (hypotenuse == b) {
leg1 = a;
leg2 = c;
} else {
leg1 = a;
leg2 = b;
}
// 找出较小的直角边
int opposite = std::min(leg1, leg2);
// 求分子和分母的最大公约数,然后化简分数
int gcdValue = gcd(opposite, hypotenuse);
int numerator = opposite / gcdValue;
int denominator = hypotenuse / gcdValue;
// 输出结果
std::cout << numerator << "/" << denominator << std::endl;
return 0;
}