无情修罗 发表于 2014-12-17 21:04:58

求大神帮忙一个菜鸟级的问题

本帖最后由 无情修罗 于 2014-12-17 21:08 编辑

 输入两个正整数m和n,求其最大公约数和最小公倍数。注:最大公约数也称最大公因子,指某几个整数共有因子中最大的一个;两个整数公有的倍数称为它们的公倍数,其中最小的一个正整数称为它们两个的最小公倍数。编程可用素材:printf("please input two integer numbers: ")、printf("\nthe greatest common divisor is …、printf("\nthe least common multiple is …。

<p> <div class="blockcode"><blockquote>#include<stdio.h>

int main()
{
      int m,n,i,j,k,l,p;
      printf("please input two integer numbers: ");
      scanf("%d %d",&m,&n);
      if(m>=n)
      {
                k=n;
      }
      else
      {
                k=m;
      }
      for(i=1;i<k;i++)
      {
                if((m%i==0)&&(n%i==0))
                {
                        j=i;
                }
      }
      if(m>=n)
      {
                l=m;
      }
      else
      {
                l=n;
      }
      for(i=l;;i++)
      {
                if((i%m==0)&&(i%n==0))
                {
                        p=i;
                        break;
                }
      }
      printf("\nthe greatest common divisor is %d",j);
      printf("\nthe least common multiple is %d",p);

      return 0;

}
这是我写的可是提交答案时提示失分,未实现:m与n相等时的公约数与公倍数正确
希望帮忙解决一下.谢谢!

zx154140599 发表于 2014-12-17 21:04:59

#include<stdio.h>
void main()   /*辗转相除法求最大公约数 */
{
   int m, n, a, b, c;
   printf("Input two integer numbers:\n");
   scanf("%d%d", &a, &b);
   m=a;   n=b;
   while(b!=0)/* 余数不为0,继续相除,直到余数为0 */
   { c=a%b; a=b;b=c;}
   printf("The largest common divisor:%d\n", a);
   printf("The least common multiple:%d\n", m*n/a);
}

zx154140599 发表于 2014-12-23 10:44:19

这个代码效率太低,有更好的算法

zx154140599 发表于 2014-12-23 10:47:03

你的代码问题在17行for(i=1;i<=k;i++)加个=号就行了

无情修罗 发表于 2014-12-23 13:03:41

zx154140599 发表于 2014-12-23 10:47
你的代码问题在17行for(i=1;i

十分感谢!你的方法果然很好啊!

zjc78361 发表于 2015-1-20 15:27:25

学习一下

zjc78361 发表于 2015-1-20 16:15:43

3000年前别人就会了,
页: [1]
查看完整版本: 求大神帮忙一个菜鸟级的问题