程序运行准确,但是自己笔下算就不正确,求解答
程序运行正确,但是自己笔下算就不正确,求解答
程序如下
#include<stdio.h>
int main()
{int p,r,n,m,temp;
printf("请输入两个正整数n,m:");
scanf("%d,%d",&n,&m);
if(n<m)
{temp=m;
m=n;
n=temp;
}
p=n*m;
while(m!=0)
{r=n%m;
n=m;
m=r;
}
printf("他们的最大公约数为:%d\n",n);
printf("他们的最小公倍数为:%d\n",p/n);
return 0;
}
楼主假设n=30,m=20,那就跳过了if语句,直接到下面的p=n*m=600了,接下来的while就发现问题了,r是n除以m的余数,那么就是r=10,接下来的语句n=m,然后把m赋给n,那么n是等于20呀,这样想的话输出的最大公约数是20,是错的,但是就是找不到问题在哪里,求解呀
------解决思路----------------------
你怎么能够只算一次呢?
你要一直算到下面这个不成立才能够退出,否则一直在里面除下去。
while(m!=0)
你说的算到n=20时,m就是10了。while(m!=0)这个继续成立,所以又进入里面了。
程序如下
#include<stdio.h>
int main()
{int p,r,n,m,temp;
printf("请输入两个正整数n,m:");
scanf("%d,%d",&n,&m);
if(n<m)
{temp=m;
m=n;
n=temp;
}
p=n*m;
while(m!=0)
{r=n%m;
n=m;
m=r;
}
printf("他们的最大公约数为:%d\n",n);
printf("他们的最小公倍数为:%d\n",p/n);
return 0;
}
楼主假设n=30,m=20,那就跳过了if语句,直接到下面的p=n*m=600了,接下来的while就发现问题了,r是n除以m的余数,那么就是r=10,接下来的语句n=m,然后把m赋给n,那么n是等于20呀,这样想的话输出的最大公约数是20,是错的,但是就是找不到问题在哪里,求解呀
------解决思路----------------------
你怎么能够只算一次呢?
你要一直算到下面这个不成立才能够退出,否则一直在里面除下去。
while(m!=0)
你说的算到n=20时,m就是10了。while(m!=0)这个继续成立,所以又进入里面了。