简单代码,望大佬指点!
如这道题:由键盘输入两个正整数m、n(m、n<1000000),计算它们的最大公约数。答案如下:
{
int m,n,r;
scanf("%d,%d",&m,&n);
while((r=m%n)!=0)
{
m=n;
n=r;
}
printf("%d",n);
return 0;
}
问为什么while下面那里不可以直接写n=r呢?(请详细讲解一下)谢谢大家! 你是想n等于r吧?那是两个等号n==r 你是不明白那里为什么不直接写n=r还是说你这个程序写n=r运行不了?我觉得不会运行不了吧 本帖最后由 西瓜小刚 于 2018-10-13 10:53 编辑
老哥说的是 不要m = n 这个条件,直接while下面写n=r吧, 我举个反例你就知道了比如 你输入18 和 28 你会发现你程序运行的结果是 4 (正确应该是 2) 而你要输入 28 和 18 答案更离谱
你仔细看一下程序的运行流程就知道了 。 我帮你做了两个流程图比较,希望能帮到你 ^_^
#include <stdio.h>
int main()
{
int n,m,r;
printf("请输入两位整数n m: ");
scanf("%d %d",&n,&m);
if(n>1000000 || m>100000)
return 0;
printf("%d与%d的最大公约数为:",n,m);
while((r=m%n)!=0)
{
m=n;
n=r;
}
printf("%d\n",n);
/* while(n)
{
r=m%n;
m=n;
n=r;
}
printf("%d\n",m);
*/
return 0;
}
啊涂涂 发表于 2018-10-13 08:35
你是想n等于r吧?那是两个等号n==r
不是,是赋值的。我是不懂这道题为什么不可以直接写n=r 西瓜小刚 发表于 2018-10-13 10:50
老哥说的是 不要m = n 这个条件,直接while下面写n=r吧, 我举个反例你就知道了比如 你输入18 和 28...
明白了,辛苦你了{:10_277:} love码 发表于 2018-10-14 02:17
明白了,辛苦你了
{:5_109:}不客气一起加油
页:
[1]