首页 新闻 搜索 专区 学院

出现了未知的bug(是在找不到啊!我的编译器还没法调试)

0
悬赏园豆:10 [已解决问题] 解决于 2019-10-14 15:35

include<stdio.h>

int main(void)
{int a,b,t,yue,bei; //yue:最大公约数,bei:最小公倍数
scanf("%d %d",&a,&b);
if(a<b)
{a=t;
a=b;
b=t;
}
for(yue=b;yue<=2;yue--) //求最大公约数
{if(a%yue==0&&b%yue==0)
{
printf("%d",yue);
break;
}
}
if(yue==1)
printf("%d",yue);
for(bei=a;bei<=a*b;bei++)//求最小公倍数
{if(bei%a==0&&bei%b==0)
{
printf("%d",bei);
break;
}
}
return 0;

} //问题出在了最大公约数上,输出的结果只有最小公倍数。

c
Fate-Joker的主页 Fate-Joker | 初学一级 | 园豆:158
提问于:2019-10-13 21:41
< >
分享
最佳答案
0

照你的思路,for循环里的条件判断用错了,应该是>=,代码如下

#include<stdio.h>
int main(void)
{
    int a, b;
    scanf("%d %d", &a, &b);
    if (a < b)
    {
        int temp = a;
        a = b;
        b = temp;
    }
    for (int yue = b; yue >= 2; yue--) // 这里是'>=',不是'<='
    {
        if (a % yue == 0 && b % yue == 0)
        {
            printf("%d", yue);
            break;
        }
    }
    return 0;
}

一般求最大公约数使用的是辗转相除法,效率比枚举法更高,代码如下:

#include<stdio.h>
int main()
{
    int a, b, t;
    scanf("%d %d", &a, &b);
    while (b != 0) {
        t = a % b;
        a = b;
        b = t;
    }
    printf("最大公约数是%d", a);
    return 0;
}
收获园豆:9
黑白条纹 | 菜鸟二级 |园豆:286 | 2019-10-14 08:32

谢谢,非常感谢,刚刚深入理解了下您给出的辗转相除法,非常实用!

Fate-Joker | 园豆:158 (初学一级) | 2019-10-14 15:34
其他回答(2)
0

第一个if后面a=t就有问题

收获园豆:1
Arthurian | 园豆:937 (小虾三级) | 2019-10-13 23:38

大神,能具体说说问题出在哪吗?这个求最大公约数的方法是我在百度上查的。

支持(0) 反对(0) Fate-Joker | 园豆:158 (初学一级) | 2019-10-14 15:22

这个用t,我理解的是无论输入的a,b谁大,都得令a大,不然没法操作

支持(0) 反对(0) Fate-Joker | 园豆:158 (初学一级) | 2019-10-14 15:25

@Fate-Joker:

1、t那会并没有初始化,直接赋给a没意义;

2、a=t之后直接再来一个a=b,那就不管t是几,a都等于b了

3、a=b之后,a原来你输入的值就没了,输入a也就没意义了,因为你并没有另外找个临时变量存那个值

支持(0) 反对(0) Arthurian | 园豆:937 (小虾三级) | 2019-10-19 00:02
-1

你好你好你好

Yvonne718 | 园豆:254 (菜鸟二级) | 2019-10-14 09:40

你好呀。

支持(0) 反对(0) Fate-Joker | 园豆:158 (初学一级) | 2019-10-14 15:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册