忧默的小男孩 2022-03-02 16:06 采纳率: 94.4%
浏览 551
已结题

关于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

  • 写回答

3条回答 默认 最新

  • CSDN专家-link 2022-03-02 16:19
    关注

    最小公倍数你用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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月2日
  • 已采纳回答 3月2日
  • 创建了问题 3月2日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装