首页 > 用户发贴区 > 编程问题提问区 > 求最大公约数
2008
09-10

以下这段代码的功能是求两个数的最公约数,但是只对较小的数起作用,上了几千就明显出错,谁帮忙看看#include<stdio.h>
int maxy(int a,int b)
{
 int c,d;
 c=a>b?a:b;
 d=a<=b?a:b;
 if(c%d==0)
  return d;
 else
  return maxy(c/d,c%d);
}
main(void)
{
 int a,b,c;
 printf(“input two numbers:\n”);
 scanf(“%d %d”,&a,&b);
 c=maxy(a,b);
 printf(“maxy of a and b is %d\n”,c);
}


求最大公约数》有 4 条评论

  1. xcgang 说:

    你这算法根本就不对, 比如 18, 24 ,应该输出 为 6 ,你的输出

    是 1.

  2. xcgang 说:

    int maxy(int a,int b)

    {

       if ((a<=0)||(b<=0))

          return 0 ;

       while (1)

       {

          if (a>b)

             a = a-b ;

          else

             if (a<b)

                b= b-a ;

          else

             return a ;

       }

       /* 后者用下面的代替前面的while一段,递归

       if (a>b)

          a = a-b ;

       else

          if (a<b)

             b= b-a ;

       else

          return a ;

       return maxy(a,b);

       */

    }

  3. frisa 说:

    谢谢了,我把线性代数中的带余除法弄错了

  4. terryzzh 说:

    #include<stdio.h>
    void main()
    {
     int a,b,i;
     printf(“输入两个正整数:”);
     scanf(“%d%d”,&a,&b);
     for(i=a+b;i>=1&&i<=a+b;i–)
      if(a%i==0&&b%i==0) break;
     printf(“最大公约数是%d\n”,i);
    }

    试试这个能满足你的妖要求不

留下一个回复