请问这两段代码的区别是什么啊!!一个求最大公约数和最小公倍数的问题
我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
在编译器上确实都正常,只是在oj平台上其中一个就无法通过 楼主你可以测试一下其中一个输入参数为“0”的情况! 路过 前路 发表于 2018-11-4 22:53
楼主你可以测试一下其中一个输入参数为“0”的情况!
题目保证输入全部为正整数 Sa。。 发表于 2018-11-5 14:04
题目保证输入全部为正整数
我再去看看 前路 发表于 2018-11-5 21:33
我再去看看
好的谢谢
我试了一下,两个算法都没有问题的。 但这句话有问题scanf("%d%d", &m, &n),中间加个逗号吧 想看看你那不能通过的界面是什么样的 本帖最后由 Sa。。 于 2018-11-16 08:28 编辑
守望星星 发表于 2018-11-13 15:19
想看看你那不能通过的界面是什么样的
Sa。。 发表于 2018-11-16 08:26
还以为会有错误提示,结果真尴尬 守望星星 发表于 2018-11-19 08:06
还以为会有错误提示,结果真尴尬
学校的平台都是这样,根本不告诉哪里错了 抱歉,我去尝试了下,发现这两个没有在算术上没有什么漏洞:
1:(最大输入 * 另一个输入)/最大公约数
2:(最大输入 / 最大公约数 ) * 另一个输入
但看算术两个的差别就是运算顺序,能产生误差影响的也只有最大公约数的判断,
但是这两个算术在最大公约数的判断上我都没有找出问题,
那就再看输出结果,也没有问题!
因此恕我无能为力,破解不了啊! 版本不同吧,或者有些库没有更新,不支持 还不简单 普遍问题 你的m*n的结果 有可能超过 2147483647 JASONDONG 发表于 2018-11-10 22:05
我试了一下,两个算法都没有问题的。 但这句话有问题scanf("%d%d", &m, &n),中间加个逗号吧
不需要,上面的代码没问题 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 wangsy 发表于 2019-8-8 10:36
11
11
11
你不简单
页:
[1]
2