鱼C论坛

 找回密码
 立即注册
查看: 1373|回复: 6

[已解决]简单代码,望大佬指点!

[复制链接]
发表于 2018-10-13 01:47:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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:50:02
本帖最后由 西瓜小刚 于 2018-10-13 10:53 编辑

老哥说的是 不要  m = n 这个条件,直接while下面写n=r吧, 我举个反例你就知道了  比如 你输入  18 和 28 你会发现你程序运行的结果是 4 (正确应该是 2)   而你要输入 28 和 18 答案更离谱

你仔细看一下程序的运行流程就知道了 。 我帮你做了两个流程图比较,希望能帮到你 ^_^


  1. #include <stdio.h>
  2. int main()
  3. {

  4.         int n,m,r;
  5.         printf("请输入两位整数n m: ");
  6.         scanf("%d %d",&n,&m);
  7.         if(n>1000000 || m>100000)
  8.                 return 0;
  9.         printf("%d与%d的最大公约数为:",n,m);
  10.         while((r=m%n)!=0)
  11.     {
  12.         m=n;
  13.         n=r;
  14.     }
  15.         printf("%d\n",n);
  16. /*        while(n)
  17.     {
  18.                 r=m%n;
  19.         m=n;
  20.         n=r;
  21.     }
  22.    
  23.     printf("%d\n",m);
  24. */
  25.         return 0;
  26. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-13 08:35:54 From FishC Mobile | 显示全部楼层
你是想n等于r吧?那是两个等号n==r
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-13 08:41:34 From FishC Mobile | 显示全部楼层
你是不明白那里为什么不直接写n=r还是说你这个程序写n=r运行不了?我觉得不会运行不了吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-13 10:50:02 | 显示全部楼层    本楼为最佳答案   
本帖最后由 西瓜小刚 于 2018-10-13 10:53 编辑

老哥说的是 不要  m = n 这个条件,直接while下面写n=r吧, 我举个反例你就知道了  比如 你输入  18 和 28 你会发现你程序运行的结果是 4 (正确应该是 2)   而你要输入 28 和 18 答案更离谱

你仔细看一下程序的运行流程就知道了 。 我帮你做了两个流程图比较,希望能帮到你 ^_^


  1. #include <stdio.h>
  2. int main()
  3. {

  4.         int n,m,r;
  5.         printf("请输入两位整数n m: ");
  6.         scanf("%d %d",&n,&m);
  7.         if(n>1000000 || m>100000)
  8.                 return 0;
  9.         printf("%d与%d的最大公约数为:",n,m);
  10.         while((r=m%n)!=0)
  11.     {
  12.         m=n;
  13.         n=r;
  14.     }
  15.         printf("%d\n",n);
  16. /*        while(n)
  17.     {
  18.                 r=m%n;
  19.         m=n;
  20.         n=r;
  21.     }
  22.    
  23.     printf("%d\n",m);
  24. */
  25.         return 0;
  26. }
复制代码

你所想的程序运行的结果

你所想的程序运行的结果

正确程序运行的结果

正确程序运行的结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 2018-10-14 01:52:24 | 显示全部楼层
啊涂涂 发表于 2018-10-13 08:35
你是想n等于r吧?那是两个等号n==r

不是,是赋值的。我是不懂这道题为什么不可以直接写n=r
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-14 02:17:10 | 显示全部楼层
西瓜小刚 发表于 2018-10-13 10:50
老哥说的是 不要  m = n 这个条件,直接while下面写n=r吧, 我举个反例你就知道了  比如 你输入  18 和 28  ...

明白了,辛苦你了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-14 11:24:19 | 显示全部楼层
love码 发表于 2018-10-14 02:17
明白了,辛苦你了

不客气  一起加油
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-4 10:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表