鱼C论坛

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

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

[复制链接]
发表于 2018-11-1 16:52:47 | 显示全部楼层 |阅读模式
20鱼币
我i使用的辗转相除法,先求最大公约数,在用两个数的乘积除以最大公约数得到最小公倍数!
这是我开始的做法
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int m, n, r1, temp, mul;
  5.         scanf("%d%d", &m, &n);
  6.         mul = m * n;
  7.         if(m <= n)
  8.         {
  9.                 temp = m;
  10.                 m = n;
  11.                 n = temp;
  12.         }
  13.         do
  14.         {
  15.                 r1 = m % n;
  16.                 m = n;
  17.                 n = r1;
  18.         } while(r1);
  19.         printf("%d %d", m, mul / m);
  20.         return 0;
  21. }
复制代码

这是我更改后的做法,就改了一下乘除顺序
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int m, n, r1, temp, mul;
  5.         scanf("%d%d", &m, &n);
  6.         if(m <= n)
  7.         {
  8.                 temp = m;
  9.                 m = n;
  10.                 n = temp;
  11.         }
  12.         temp = m, mul = n;
  13.         do
  14.         {
  15.                 r1 = m % n;
  16.                 m = n;
  17.                 n = r1;
  18.         } while(r1);
  19.         printf("%d %d", m, temp / m * mul);
  20.         return 0;
  21. }
复制代码
这是我们学校的oj平台,上面的方法不能通过,下面的方法就能通过,不知道什么原因,求解答!!!

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-11-1 20:58:52 | 显示全部楼层
2018111_205822.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-11-1 21:08:27 | 显示全部楼层
两边输出的最大公倍数都不一样。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

在编译器上确实都正常,只是在oj平台上其中一个就无法通过
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-11-4 22:53:29 | 显示全部楼层
楼主你可以测试一下其中一个输入参数为“0”的情况!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-11-5 10:12:27 | 显示全部楼层
路过
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

题目保证输入全部为正整数
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

我再去看看
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

好的谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

发表于 2018-11-13 15:19:00 | 显示全部楼层
想看看你那不能通过的界面是什么样的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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


QQ截图20181116082604.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

还以为会有错误提示,结果真尴尬
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

学校的平台都是这样,根本不告诉哪里错了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

发表于 2019-8-1 15:58:35 | 显示全部楼层
版本不同吧,或者有些库没有更新,不支持
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-8-1 17:02:17 | 显示全部楼层
还不简单 普遍问题 你的m*n的结果 有可能超过 2147483647
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

不需要,上面的代码没问题
小甲鱼最新课程 -> https://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
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

你不简单
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-3 18:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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