love码 发表于 2018-10-13 01:47:21

简单代码,望大佬指点!

如这道题:由键盘输入两个正整数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 08:35:54

你是想n等于r吧?那是两个等号n==r

啊涂涂 发表于 2018-10-13 08:41:34

你是不明白那里为什么不直接写n=r还是说你这个程序写n=r运行不了?我觉得不会运行不了吧

西瓜小刚 发表于 2018-10-13 10:50:02

本帖最后由 西瓜小刚 于 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;
}

love码 发表于 2018-10-14 01:52:24

啊涂涂 发表于 2018-10-13 08:35
你是想n等于r吧?那是两个等号n==r

不是,是赋值的。我是不懂这道题为什么不可以直接写n=r

love码 发表于 2018-10-14 02:17:10

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

明白了,辛苦你了{:10_277:}

西瓜小刚 发表于 2018-10-14 11:24:19

love码 发表于 2018-10-14 02:17
明白了,辛苦你了

{:5_109:}不客气一起加油
页: [1]
查看完整版本: 简单代码,望大佬指点!