鱼C论坛

 找回密码
 立即注册
查看: 5137|回复: 20

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

[复制链接]
发表于 2018-11-1 16:52:47 | 显示全部楼层 |阅读模式
20鱼币
我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平台,上面的方法不能通过,下面的方法就能通过,不知道什么原因,求解答!!!

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-1 20:58:52 | 显示全部楼层
2018111_205822.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-1 21:08:27 | 显示全部楼层
两边输出的最大公倍数都不一样。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-11-2 07:50:15 | 显示全部楼层

在编译器上确实都正常,只是在oj平台上其中一个就无法通过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-4 22:53:29 | 显示全部楼层
楼主你可以测试一下其中一个输入参数为“0”的情况!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-5 10:12:27 | 显示全部楼层
路过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-11-5 14:04:17 | 显示全部楼层
前路 发表于 2018-11-4 22:53
楼主你可以测试一下其中一个输入参数为“0”的情况!

题目保证输入全部为正整数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-5 21:33:20 | 显示全部楼层
Sa。。 发表于 2018-11-5 14:04
题目保证输入全部为正整数

我再去看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-11-6 09:09:45 | 显示全部楼层

好的谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-10 22:05:21 | 显示全部楼层
我试了一下,两个算法都没有问题的。 但这句话有问题scanf("%d%d", &m, &n),中间加个逗号吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-13 15:19:00 | 显示全部楼层
想看看你那不能通过的界面是什么样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-11-16 08:26:56 | 显示全部楼层
本帖最后由 Sa。。 于 2018-11-16 08:28 编辑
守望星星 发表于 2018-11-13 15:19
想看看你那不能通过的界面是什么样的


QQ截图20181116082604.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-19 08:06:16 | 显示全部楼层

还以为会有错误提示,结果真尴尬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-11-20 19:31:47 | 显示全部楼层
守望星星 发表于 2018-11-19 08:06
还以为会有错误提示,结果真尴尬

学校的平台都是这样,根本不告诉哪里错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-21 22:46:21 | 显示全部楼层
抱歉,我去尝试了下,发现这两个没有在算术上没有什么漏洞:
1:(最大输入 * 另一个输入)  /  最大公约数
2:(最大输入 / 最大公约数 ) * 另一个输入
但看算术两个的差别就是运算顺序,能产生误差影响的也只有最大公约数的判断,
但是这两个算术在最大公约数的判断上我都没有找出问题,
那就再看输出结果,也没有问题!
因此恕我无能为力,破解不了啊!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-8-1 15:58:35 | 显示全部楼层
版本不同吧,或者有些库没有更新,不支持
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-8-1 17:02:17 | 显示全部楼层
还不简单 普遍问题 你的m*n的结果 有可能超过 2147483647
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-8-2 18:31:03 | 显示全部楼层
JASONDONG 发表于 2018-11-10 22:05
我试了一下,两个算法都没有问题的。 但这句话有问题scanf("%d%d", &m, &n),中间加个逗号吧

不需要,上面的代码没问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-8-8 10:36:54 | 显示全部楼层
           11
           11
           11
           11
11  11  11  11 11
11  11  11  11  111
11  11  11  11  111
11 11  11 11  11
  11 11 11 11 11
    1 11 11 111
     1 11 11 11
     1 11 11 11
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-8-8 12:04:33 | 显示全部楼层
wangsy 发表于 2019-8-8 10:36
11
           11
           11

你不简单
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-29 09:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表