
输入21和28最小公倍数是错的,输入34和23是错的,输入3和21是对的,哪出了问题,是对输入的数有什么要求吗
#include
int main(void){
int m,n,r,gcd,lcm;
printf("输入两个正整数:");
scanf("%d%d",&m,&n);
while(1){
r=m%n;
if(r==0)
break;
m=n;
n=r;
}
gcd=n;
lcm=m/gcd*n;
printf("最大公约数:%d\n",gcd);
printf("最小公倍数:%d\n",lcm);
return 0;
}这是因为循环的时候m和n都变了,而最大公约数与最小公倍数的乘积等于m*n,是指开始的值。
解决方法:再设置俩个变量记录初值,然后再最后计算最小公倍数就可以了。