主题:帮忙改改错!!
dinghao517 [专家分:20] 发布于 2010-03-07 18:33:00
这是求两个数的最大公约数与最小公倍数。
#include <stdio.h>
#include <stdlib.h>
int main()
{int maxgongyue(int x,int y);
int mingongbei(int x,int y);
int a,b,max,min;
scanf ("%d,%d",&a,&b);
max=maxgongyue(a,b);
min=mingongbei(a,b);
printf ("%d、%d的最大公约数为%d,最小公倍数为%d\n",a,b,max,min);
system("pause");
return 0;
}
int maxgongyue(int x,int y)
{int t,i,max;
if(x<y) t=x;
else t=y;
for (i=t;i>0;i--)
if (x%t==0&&y%t==0) max=t;
return (max);
}
int mingongbei(int x,int y)
{int t,i,min;
if(x>y) t=x;
else t=y;
for(i=t;i>t-1;i++)
if (t%x==0&&t%y==0) min=t;
return (min);
}
回复列表 (共6个回复)
沙发
雪光风剑 [专家分:27190] 发布于 2010-03-07 18:42:00
没看懂你最小公倍的算法
最大公约的算法也不对,你求的是最小公约
int maxgongyue(int x,int y)
{int t,i;
if(x<y)
t=x;
else
t=y;
for (i=t;i>0;i--)
if (x%t==0&&y%t==0)
return t;
}
就得到最大公约了
最小公倍,就是两数相乘再除以最大公约就可以了嘛……
板凳
dinghao517 [专家分:20] 发布于 2010-03-07 19:01:00
我改成这样还是不对
#include <stdio.h>
#include <stdlib.h>
int main()
{int maxgongyue(int x,int y);
int a,b,max,min;
scanf ("%d,%d",&a,&b);
max=maxgongyue(a,b);
min=(a*b)/max;
printf ("%d、%d的最大公约数为%d,最小公倍数为%d\n",a,b,max,min);
system("pause");
return 0;
}
int maxgongyue(int x,int y)
{int t,i;
if(x<y)
t=x;
else
t=y;
for (i=t;i>0;i--)
if (x%t==0&&y%t==0)
return t;
}
3 楼
雪光风剑 [专家分:27190] 发布于 2010-03-07 21:23:00
(x%t==0&&y%t==0)
这个判断条件……
得写成
((x%t==0)&&(y%t==0))才可以……
4 楼
cxxcomp [专家分:2370] 发布于 2010-03-07 22:02:00
试试这样做。vc6编译通过。
[code=c]
#include <stdio.h>
void swap(int& val1, int& val2)
{
int tmp = val1;
val1 = val2;
val2 = tmp;
}
int gcd(int nValue1, int nValue2)
{
if (nValue1 < nValue2)
swap(nValue1, nValue2);
if (0 == nValue2)
return nValue1;
return gcd(nValue2, nValue1 % nValue2);
}
int lcm(int nValue1, int nValue2)
{
return nValue1 * nValue2 / gcd(nValue1, nValue2);
}
int main(int, char **, char **)
{
printf("please input number a,b CTRL-Z stop\n");
static int ia, ib;
static int nFlag;
while (EOF != scanf("%d,%d", &ia, &ib))
{
printf("the greatest common divisor is : %d\n", gcd(ia, ib));
printf("the lease common multiple is : %d\n", lcm(ia, ib));
printf("please input number a,b CTRL-Z stop\n");
}
return 0;
}
[/code]
5 楼
雪光风剑 [专家分:27190] 发布于 2010-03-08 07:58:00
辗转相除哎~
cxx~一如既往,几点想法:
1 编译器是不是报了nFlag变量定义却没使用呢?
2 swap函数其实必要性不大,如果要这么写的话建议声明为inline
3 原题是C的,传不到引用:)
至于辗转相除,写得很精简很经典了~
6 楼
cxxcomp [专家分:2370] 发布于 2010-03-08 12:13:00
随手写的。状态不太好,调整中.....。只希望对提问的人有所帮助
1.没仔细看编译器是否报nFlag,回头我仔细检查下。
2.呵呵,接受建议。
3.在我看来C==C++,C++==C.所以,一般我只区分语言的特性,而不太注意语言本事的刻意区分。
多谢LS!
我来回复