C语言问题,菜鸟求助,谢谢

2024-12-03 13:43:11
推荐回答(4个)
回答1:

int hcf(int m, int n)
{
int r,t;
if(n>m) //比较了m和n的大小
{ //若n>m则交换两者位置,若n t=m;m=n;n=t;
}
//这时m已经大于n了
//求m,n的最大公约数
while((r=m%n)!=0) //m除n的余数不等于0
{
m=n;n=r; //除数变为被除数,商变为除数
}
return n;
}

回答2:

交换主要是保证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;
}

回答3:

交换两个值,然后算m%n取余

回答4:

什么 意思 取余运算符的 两个参数 习惯上是 是 被取余数 比 取余数 大。
虽然不换 也可以得到 正确的答案。