|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
如这道题:由键盘输入两个正整数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呢?(请详细讲解一下)谢谢大家!
本帖最后由 西瓜小刚 于 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;
- }
复制代码
|
|