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

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

悬赏问题

  • ¥15 多址通信方式的抗噪声性能和系统容量对比
  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答