回 帖 发 新 帖 刷新版面

主题:帮忙改改错!!

这是求两个数的最大公约数与最小公倍数。
#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个回复)

沙发

没看懂你最小公倍的算法
最大公约的算法也不对,你求的是最小公约
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;
}
就得到最大公约了
最小公倍,就是两数相乘再除以最大公约就可以了嘛……

板凳


我改成这样还是不对
#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 楼

(x%t==0&&y%t==0) 
这个判断条件……
得写成
((x%t==0)&&(y%t==0))才可以……

4 楼

试试这样做。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 楼

辗转相除哎~
cxx~一如既往,几点想法:
1 编译器是不是报了nFlag变量定义却没使用呢?
2 swap函数其实必要性不大,如果要这么写的话建议声明为inline
3 原题是C的,传不到引用:)
至于辗转相除,写得很精简很经典了~

6 楼

随手写的。状态不太好,调整中.....。只希望对提问的人有所帮助
1.没仔细看编译器是否报nFlag,回头我仔细检查下。
2.呵呵,接受建议。
3.在我看来C==C++,C++==C.所以,一般我只区分语言的特性,而不太注意语言本事的刻意区分。
多谢LS!

我来回复

您尚未登录,请登录后再回复。点此登录或注册