注册 登录
编程论坛 C语言论坛

求最大公约数和最小公倍数时while和if的区别

美美学c 发布于 2023-10-20 20:24, 394 次点击
#include <stdio.h>

int main()
{int gys(int m,int n);
int gbs(int m,int n);
int x,y;
scanf("%d,%d",&x,&y);
printf("%d,%d",gys(x,y),gbs(x,y));

}
int gys(int m,int n)
{int t,d;
if(m<n)
{d=m;
m=n;
n=d;
}
while(m%n)//当此处为if(m%n)其他公约数可得出而输入15,9时得到最大公约数得6改为while才可以?这是为什么啊
{t=m%n;
m=n;
n=t;
}
return (n);
}
int gbs(int m,int n)
{return(m*n/gys(m,n));
}
1 回复
#2
沈和2023-10-20 20:42
程序代码:

while(m % n)
{
  t = m % n;
  m = n;
  n = t;
}


这一段的核心是辗转相除法。辗转相除法需要多次迭代才能得出结果。
使用 if 的时候,执行一次就结束了。使用 while 就符合辗转相除法的原理。

m = 15, n = 9
第 1 次迭代:
    循环条件 15 % 9 = 6
    循环体内计算 n = 6, m = 9

第 2 次迭代:
    循环条件 9 % 6 = 3
    循环体内计算 n = 3, m = 6

第 3 次迭代:
    循环条件 6 % 3 = 0 结束迭代

要学会调试,在程序执行过程中,查看数据的变化。这样能学得更明白一些。
1