回 帖 发 新 帖 刷新版面

主题:本人菜鸟,哪位大侠帮我看看这个程序

#include "stdio.h"
void main()
{                                    
    int hcf(int,int);
    int lcd(int,int,int);
    int u,v,h,l;
    scanf("%d,%d",&u,&v);
    h=hcf(u,v);
    printf("H.C.F=%d\n",h);
    l=lcd(u,v,h);
    printf("L.C.D=%d\n",l);
}

int hcf(int u,int v)
{int t,r;
 if (v>u)
 {t=u;u=v;v=t;}
 while((r=u%v)!=0)
 {u=v;
  v=r;}
 return(v);
}



int lcd(int u,int v,int h)
{
  return(u*v/h);
}
    
    
这个是用辗转相除法求俩整数的最大公约数和最小公倍数的程序,但是运行的时候有问题,比如当我敲入“3,6(回车)”后,显示的结果是“H.C.F=1(换行)L.C.D=12635304”我检查了好多遍实在查不出原因,希望大侠能帮我指出,不甚感激

回复列表 (共5个回复)

沙发

我用 gcc 带 -std=c99 编译选项,编译和测试通过

#include <stdio.h>
#include <assert.h>

int hcf(int,int);
int lcd(int,int,int);

int main()
{
    int a, b;
    int r = scanf( "%d,%d", &a, &b );
    assert( r == 2 );

    int gcd = hcf( a, b );
    int lcm  = lcd( a, b, gcd );
    printf( "H.C.F=%d\n", gcd );
    printf( "L.C.D=%d\n", lcm );

    return 0;
}

int hcf( int a, int b )
{
    if( a < b )
    {
        int t=a;
        a = b;
        b = t;
    }
    for( int c; (c=a%b)!=0; a=b,b=c );
    return b;
}

int lcd( int a, int b, int gcd )
{
    return a/gcd*b;
}

板凳


谢谢了哈,不过你用的是什么软件啊,我用“C/C++程序设计和试验系统”这个软件,运行的时候,提示“can not open include file 'assert.h':no such file or directory"  ,后来我又用VS2010,直接就生成失败了。还有,你能不能告诉我原来的程序到底错在哪了啊?谢谢了。

3 楼

lz主函数格式应如下:
int main(){
    .....................
    return 0;
    }
其他地方没有错误    

4 楼


[em2]
int hcf(int u,int v)

 return v==0 ? u : hcf(v, u%v);
}

5 楼

你好.我是全职网赚工作者.
如果你有时间有电脑.
想在网络上创业.请联系我..
项目绝对真实.详情QQ空间资料
加盟请联系 QQ908889846

我来回复

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