2201_75843485 2023-03-24 19:15 采纳率: 50%
浏览 27

C语言 函数数组循环 基础题

问题:写两个函数,分别求这两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。
我的做法:

#include<stdio.h>

int yue(int,int );
int bei(int,int );

int main()
{
    int a,b;
    scanf("%d %d",&a,&b);
    printf("这两个数为%d,%d\n",a,b);
    printf("最大公约数为%d\n",yue(a,b));
    printf("最小公倍数为%d\n",bei(a,b));
    return 0;
}

int yue(int a,int b )
{
    int c,d;
    if(a>b)
    {
        c=b;
        for(;b>1;b--)
        {
            if(a%b==0)
            {
                if(c%b==0)
                    d=b;
                break;
            }
        }
    }
    else c=a;
        for(;a>1;a--)
        {
            if(b%a==0)
            {
                if(c%a==0)
                    d=a;
                break;
            }
        }
        return d;
}

int bei(int a ,int b )
{
    int i,j,k,min;
    long int c[100000],d[100000];
    for(j=0;;j++)
        {
            for(k=0;;k++)
            {
                c[k]=a*(k+1);
                d[k]=b*(k+1);
                if(a>b)
                    while(c[j]>d[k])
                    {
                        if(c[j]==d[k])
                        {
                            min=c[j];
                            break;
                        }
                    }
                else 
                    while(c[k]<d[j])
                    {
                        if(d[j]==c[k])
                        {
                            min=c[k];
                            break;
                        }
                    }
            }
        }
    return min;
}

最后显示的结果是:

img

没有显示最小公倍数的值,是我bei函数哪里出错了吗,帮忙找找错,谢谢

  • 写回答

2条回答 默认 最新

  • ksgpjhqf 2023-03-24 19:18
    关注

    可能是死循环,或者是你的算法太耗时,没算出来。求最大公约数可以用辗转相除法,像这样:

    int yue(int a, int b){
        int r=a%b;
        while(r>0){
            a=b,b=r,r=a%b;
        }
        return b;
    }
    

    求最小公倍数可以用两数之积除以最大公因数,像这样:

    int bei(int a,int b){
         retuen a/yue(a,b)*b;
    }
    

    如果非要枚举,也不要用数组,而是像这样:

    int bei(int a, int b){
        int min;
        if(a<b)min=a,a=b,b=min;
        for(min=0;min%b!=0;min+=a);
        return min;
    }
    
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月24日

悬赏问题

  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥20 spring boot集成mqtt的使用问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络
  • ¥66 关于川崎机器人调速问题
  • ¥15 winFrom界面无法打开
  • ¥30 crossover21 ARM64版本安装软件问题
  • ¥15 mymetaobjecthandler没有进入
  • ¥15 mmo能不能做客户端怪物
  • ¥15 osm下载到arcgis出错