int hcf(int m, int n)
{
int r,t;
if(n>m) //比较了m和n的大小
{ //若n>m则交换两者位置,若n
}
//这时m已经大于n了
//求m,n的最大公约数
while((r=m%n)!=0) //m除n的余数不等于0
{
m=n;n=r; //除数变为被除数,商变为除数
}
return n;
}
交换主要是保证m>n。其实这个算法叫辗转相除法求m与n的最大公约数,若算法理解得好,交换过程可以省略。下面是测试程序。
#include
int hcf(int m, int n)
{
int r;
while((r=m%n)!=0)
{
m=n;
n=r;
}
return n;
}
int main()
{
printf("gdys=%d\n",hcf(12,18));//求12与18的最大公约数,下同。
printf("gdys=%d\n",hcf(18,12));
return 0;
}
交换两个值,然后算m%n取余
什么 意思 取余运算符的 两个参数 习惯上是 是 被取余数 比 取余数 大。
虽然不换 也可以得到 正确的答案。