函数值为负数的结果输出正确但是,函数值为正数的输出结果不对,我用手算了一遍第一个测试集的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;
}
最小公倍数你用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);
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!