关于C语言函数的公约公倍数问题

函数值为负数的结果输出正确但是,函数值为正数的输出结果不对,我用手算了一遍第一个测试集的6和15,结果明明就是测试集的答案3和30,但是用程序输出的就是不对,而且为什么有的测试集中还有负数出现,是我哪里的类型定义错了吗?希望具体讲一讲,刚开始学,程序老是出错很多。


#include<stdio.h>
//编写最大公约数GCD函数
/*********Begin*********/
     int max(int m,int n){
     int t,a,b;
      if(m<n)
      {
          t=m;
          m=n;
          n=t;
      }
      a=m*n;
      b=m%n;
      while(b!=0)
      {
          m=n;
          n=b;
          b=m%n;
      }
      return(n);
      }
/*********End**********/ 

//编写最小公倍数LCM函数
/*********Begin*********/
     int min(int m,int n){
     int t,a,b;
      if(m<n)
      {
          t=m;
          m=n;
          n=t;
      }
      a=m*n;
      b=m%n;
      while(b!=0)
      {
          m=n;
          n=b;
          b=m%n;
      }
     return(a/n);
     }
/*********End**********/ 
int main(void)
{  
    /*********Begin*********/
int a,b,c,d;
scanf("%d,%d",&a,&b);
if(a<0 || b<0)
{
  printf("Input Error");
}
else {
c=max(a,b);
d=min(a,b);
printf("%d %d",c,d);
}
    /*********End**********/ 
    return 0;
}

img

img

img

img

img

img

img

最小公倍数你用a*b除以最大公约数啊,不用重新写
我测试了一下,输入6,15,输出是3和30啊
你输入的时候,两个数之间必须要加逗号啊,因为你输入的时候要求scanf("%d,%d" 这里的逗号要求输入时也必须有逗号!!
建议把输入时的逗号去掉,这样两个数之间用空格分隔就OK,如下:(另外题目要求用long long型,说明输入整数范围较大)

#include<stdio.h>
//编写最大公约数GCD函数
/*********Begin*********/
int max(int m,int n){
    int t,a,b;
    if(m<n)
    {
        t=m;
        m=n;
        n=t;
    }
    a=m*n;
    b=m%n;
    while(b!=0)
    {
        m=n;
        n=b;
        b=m%n;
    }
    return(n);
}
/*********End**********/ 

//编写最小公倍数LCM函数
/*********Begin*********/
long long min(int m,int n){
    long long k = m*n;
    return k/max(m,n);
}
/*********End**********/ 
int main(void)
{  
    /*********Begin*********/
    int a,b,c;
    long long d;
    scanf("%d %d",&a,&b);
    if(a<0 || b<0)
    {
        printf("Input Error");
    }
    else {
        c=max(a,b);
        d=min(a,b);
        printf("%d %lld",c,d);
    }
    /*********End**********/ 
    return 0;
}

你的问题在于:题目中的输入的两个数是用空格隔开的,但是你的代码中scanf("%d,%d",&a,&b);这里, %d和%d之间多了一个逗号,就导致读取数据出错。所以,把%d和%d之间的逗号删掉或者改成空格就可以了。

scanf("%d %d",&a,&b);

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632