一个关于C语言求两数最小公倍数和最大公约数的问题

来源:百度知道 编辑:UC知道 时间:2024/06/06 03:02:18
#include <stdio.h>
void main()
{
int m,n,p,q;
printf("plesea:");
scanf("%d%d",&m,&n);
p=(m>n)? n:m;
for(;m%p==0&&n%p==0;p--);
q=(m>n)? m:n;
for(;q%m==0&&q%n==0;q++);
printf("max:%d sam:%d\n",q,p);
}
大家帮我看看..... 谢谢了!
在VISAUL C++6.0上运行的 MAX是M、N中的大的 SAM是M N中的小的 就是运行不出正确的结果!!

for(;m%p==0&&n%p==0;p--); 你这是要当m%p==0&&n%p==0时才继续循环,
可这样的条件你一开始就不成立了,结束循环。
下面一个也是。

你的问题不大,我想或许是因为你粗心导致的吧,下面是改过之后的,错的地方已经用汉字说明了,你试试:
#include <stdio.h>
void main()
{
int m,n,p,q;
printf("plesea:");
scanf("%d%d",&m,&n);
p=(m>n)? n:m;
for(;!(m%p==0&&n%p==0);p--); /*你的原来条件和你所要的刚好相反,原来的
q=(m>n)? m:n; 当p是最大公约数的时候循环才续 */ for(;!(q%m==0&&q%n==0);q++); /*这句,你原来的语句功能是当q为最小公倍数的时候循环继续,而你的目的是当q为最小公倍数的时候循环终止,问题和上句一样*/
printf("max:%d sam:%d\n",q,p);
}

这个程序思路不对啊
首先是for循环的判断条件,一般情况下是得不到满足,如输入5,6或7,8,条件不成立,自然照原样输出,结果6,5或8,7;
就算是偶然情况下条件满足,有一种情况程序会崩,如输入1,2或1,1的时候,条件满足->执行循环->p自减(p=0)->执行循环。。0是不能作为除数的

没错啊~~~~