我正在为一个Coursera课做作业,要求我计算两个数字的最低公倍数,其中任何一个都不大于2 * 10 ^ 9.我在C和I&#中写这个39;我在一个测试用例上运行我的代码,编号为226553150和1023473145.答案是46374212988031350,但我得到的是46374212988031344,这是6的关闭!
我在Python中编写了一个正确的解决方案,它使用的方法基本上与我在下面发布的解决方案相同,但数字精度的细节显然已经为我解决了。我将此发布到SO以了解C中的浮点精度,并且因为我在互联网上看到的大部分问题以及关于LCM的SO只涉及整数。
这是我的代码,我正在使用gcc -pipe -O2 -std=c11 lcm.c
编译:
#include <stdio.h>
#include <math.h>
double gcd(double a, double b) {
if (b == 0) {
return a;
}
return gcd(b, fmod(a,b));
}
double lcm(double a, double b) {
return (a * b) / gcd(a,b);
}
int main() {
double a;
double b;
scanf("%lf %lf", &a, &b);
printf("%.0lf\n", lcm(a,b));
return 0;
}