最低公共倍数,含C中的双倍

时间:2016-04-11 04:54:24

标签: c double lcm

我正在为一个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;
}

0 个答案:

没有答案