#include <bits/stdc++.h> //万能头文件
using namespace std;
int main()
{
int a,b,c,d,e;
cin>>a>>b>>c;
d=max(max(a,b),c); //使用c++的内置函数max和min
e=min(min(a,b),c);
c=__gcd(d,e); //使用c++内置函数__gcd求最大公约数
printf("%d/%d",e/c,d/c); //分子和分母分别除以最大公约数约分
}
如果我不想用c++的内置函数__gcd求最大公约数,想自己写咋办?
那我们就自己干!
欧几里得算法又叫辗转相除法.用我们通俗易懂的话解释,除数一直和余数玩,直到把余数完没了(余数为零),这时候的除数就是我们求的最大公约数.
如16和10的最大公约数如何求?
step 1:16÷10=1······6
step 2:10÷6=1······4
step 3:6÷4=1······2
step 4:4÷2=2······0 此时除数2就是16和10的最大公约数
代码如何实现?
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a,b,c;
cin>>a>>b; //输入被除数和除数
while(a%b!=0){ //判断a除以b的余数,如果为0则不进入循环,此时b为a和b最大公约数
c=a%b; //求出a%b余数给c
a=b; //把上一次除数b变成下一次的被除数a
b=c; //把上一次的余数c作为除数赋值给b
}
cout<<b; //输出最大公约数b
}