Sa。。 发表于 2018-11-1 16:52:47

请问这两段代码的区别是什么啊!!一个求最大公约数和最小公倍数的问题

我i使用的辗转相除法,先求最大公约数,在用两个数的乘积除以最大公约数得到最小公倍数!
这是我开始的做法
#include <stdio.h>

int main()
{
        int m, n, r1, temp, mul;
        scanf("%d%d", &m, &n);
        mul = m * n;
        if(m <= n)
        {
                temp = m;
                m = n;
                n = temp;
        }
        do
        {
                r1 = m % n;
                m = n;
                n = r1;
        } while(r1);
        printf("%d %d", m, mul / m);
        return 0;
}
这是我更改后的做法,就改了一下乘除顺序
#include <stdio.h>

int main()
{
        int m, n, r1, temp, mul;
        scanf("%d%d", &m, &n);
        if(m <= n)
        {
                temp = m;
                m = n;
                n = temp;
        }
        temp = m, mul = n;
        do
        {
                r1 = m % n;
                m = n;
                n = r1;
        } while(r1);
        printf("%d %d", m, temp / m * mul);
        return 0;
} 这是我们学校的oj平台,上面的方法不能通过,下面的方法就能通过,不知道什么原因,求解答!!!

ba21 发表于 2018-11-1 20:58:52

狂狂狂狂狂 发表于 2018-11-1 21:08:27

两边输出的最大公倍数都不一样。。。

Sa。。 发表于 2018-11-2 07:50:15

ba21 发表于 2018-11-1 20:58


在编译器上确实都正常,只是在oj平台上其中一个就无法通过

前路 发表于 2018-11-4 22:53:29

楼主你可以测试一下其中一个输入参数为“0”的情况!

第五 发表于 2018-11-5 10:12:27

路过

Sa。。 发表于 2018-11-5 14:04:17

前路 发表于 2018-11-4 22:53
楼主你可以测试一下其中一个输入参数为“0”的情况!

题目保证输入全部为正整数

前路 发表于 2018-11-5 21:33:20

Sa。。 发表于 2018-11-5 14:04
题目保证输入全部为正整数

我再去看看

Sa。。 发表于 2018-11-6 09:09:45

前路 发表于 2018-11-5 21:33
我再去看看

好的谢谢

JASONDONG 发表于 2018-11-10 22:05:21

我试了一下,两个算法都没有问题的。 但这句话有问题scanf("%d%d", &m, &n),中间加个逗号吧

守望星星 发表于 2018-11-13 15:19:00

想看看你那不能通过的界面是什么样的

Sa。。 发表于 2018-11-16 08:26:56

本帖最后由 Sa。。 于 2018-11-16 08:28 编辑

守望星星 发表于 2018-11-13 15:19
想看看你那不能通过的界面是什么样的

守望星星 发表于 2018-11-19 08:06:16

Sa。。 发表于 2018-11-16 08:26


还以为会有错误提示,结果真尴尬

Sa。。 发表于 2018-11-20 19:31:47

守望星星 发表于 2018-11-19 08:06
还以为会有错误提示,结果真尴尬

学校的平台都是这样,根本不告诉哪里错了

前路 发表于 2018-11-21 22:46:21

抱歉,我去尝试了下,发现这两个没有在算术上没有什么漏洞:
1:(最大输入 * 另一个输入)/最大公约数
2:(最大输入 / 最大公约数 ) * 另一个输入
但看算术两个的差别就是运算顺序,能产生误差影响的也只有最大公约数的判断,
但是这两个算术在最大公约数的判断上我都没有找出问题,
那就再看输出结果,也没有问题!
因此恕我无能为力,破解不了啊!

AmosAlbert 发表于 2019-8-1 15:58:35

版本不同吧,或者有些库没有更新,不支持

micolar 发表于 2019-8-1 17:02:17

还不简单 普遍问题 你的m*n的结果 有可能超过 2147483647

Python.爱好者 发表于 2019-8-2 18:31:03

JASONDONG 发表于 2018-11-10 22:05
我试了一下,两个算法都没有问题的。 但这句话有问题scanf("%d%d", &m, &n),中间加个逗号吧

不需要,上面的代码没问题

wangsy 发表于 2019-8-8 10:36:54

         11
         11
         11
         11
11111111 11
11111111111
11111111111
11 1111 1111
11 11 11 11 11
    1 11 11 111
   1 11 11 11
   1 11 11 11

AmosAlbert 发表于 2019-8-8 12:04:33

wangsy 发表于 2019-8-8 10:36
11
         11
         11


你不简单
页: [1] 2
查看完整版本: 请问这两段代码的区别是什么啊!!一个求最大公约数和最小公倍数的问题