Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何获得双打的(最大公约数)GCD_Algorithm_Greatest Common Divisor - Fatal编程技术网

Algorithm 如何获得双打的(最大公约数)GCD

Algorithm 如何获得双打的(最大公约数)GCD,algorithm,greatest-common-divisor,Algorithm,Greatest Common Divisor,这是一项简单的任务,但我似乎不知道怎么做 下面是一个示例函数结构 private double GetGCD(double num1, double num2) { //should return the GCD of the two double } 测试数据 num1 = 6; num2 = 3; *return value must be 3* num1 = 8.8; num2 = 6.6; *return value must be 2.2

这是一项简单的任务,但我似乎不知道怎么做

下面是一个示例函数结构

private double GetGCD(double num1, double num2)
{
    //should return the GCD of the two double
}
测试数据

   num1 = 6;
   num2 = 3;
   *return value must be 3*

   num1 = 8.8;
   num2 = 6.6;
   *return value must be 2.2*

   num1 = 5.1;
   num2 = 8.5;
   *return value must be 1.7*
注:最大小数位数为1。 编程语言并不重要。我只需要算法


请帮忙。。谢谢大家!

如果只有一个小数位,将数字乘以10,将其转换为整数,然后运行计算

这也将拯救你

引用一下,Python中的基本欧几里德算法(用于整数!)是:

def gcd(a,b): “”“计算a和b的最大公约数。 除非b==0,否则结果将与b具有相同的符号(因此 b除以它,结果为正)。 """ 而b: a、 b=b,a%b 归还 因此,您的代码应该类似于:

def gcd_浮动(x,y): 返回gcd(整数(x*10),整数(y*10))/10
如果只有一个小数位,请将数字乘以10,将其转换为整数,然后运行计算

这也将拯救你

引用一下,Python中的基本欧几里德算法(用于整数!)是:

def gcd(a,b): “”“计算a和b的最大公约数。 除非b==0,否则结果将与b具有相同的符号(因此 b除以它,结果为正)。 """ 而b: a、 b=b,a%b 归还 因此,您的代码应该类似于:

def gcd_浮动(x,y): 返回gcd(整数(x*10),整数(y*10))/10
在web上有无数的地方可以找到GCD功能的代码。严格地说,它只定义在整数上,所以我建议你用双倍乘以10,算出GCD,然后把结果除以10。这将为您省去因使用错误的数据类型而产生的痛苦。

在web上有无数个地方可以找到GCD函数的代码。严格地说,它只定义在整数上,所以我建议你用双倍乘以10,算出GCD,然后把结果除以10。这将为您省去因使用错误数据类型而带来的痛苦。

这里有一个来自谷歌的源代码,其中包含一些java代码:这非常全面。

这里有一个来自谷歌的源代码,其中包含一些java代码:这非常全面。

当它是8.8和6.6时,您可以找到GCD 88和66,然后将其除以10.

当它是8.8和6.6时,你可以找到88和66的GCD,然后用2种方法将其除以10。

  • 传统的划分方法
  • 欧几里得方法
  • 使用2种方法

  • 传统的划分方法
  • 欧几里得方法

  • 不存在不是离散的数字的GCD。然而,你的情况更为具体。如果您的输入不是双精度的,而是十进制的,那么您可以将其转换为分数,乘以分母,找到分子的GCD,然后再向下除。即:

    8.800 = 8800/1000 = 44/5 (by GCD)
    6.600 = 6600/1000 = 33/5 (by GCD)
    
    5.100 = 5100/1000 = 51/10
    8.500 = 8500/1000 = 17/2
    
    在这一步中简化分数很有用,以避免我们的数字变得太大

    移到共同点:

    44*5/5*5 = 220/25
    33*5/5*5 = 165/25
    
    51*2/2*10 = 102/20
    17*10/2*10 = 170/20
    
    分子的GCD:

    gcd(165,220) = 55
    
    gcd(102,170) = 34
    

    所以答案是55/25和34/20。

    没有一个数字的GCD不是离散的。然而,你的情况更为具体。如果您的输入不是双精度的,而是十进制的,那么您可以将其转换为分数,乘以分母,找到分子的GCD,然后再向下除。即:

    8.800 = 8800/1000 = 44/5 (by GCD)
    6.600 = 6600/1000 = 33/5 (by GCD)
    
    5.100 = 5100/1000 = 51/10
    8.500 = 8500/1000 = 17/2
    
    在这一步中简化分数很有用,以避免我们的数字变得太大

    移到共同点:

    44*5/5*5 = 220/25
    33*5/5*5 = 165/25
    
    51*2/2*10 = 102/20
    17*10/2*10 = 170/20
    
    分子的GCD:

    gcd(165,220) = 55
    
    gcd(102,170) = 34
    

    所以答案是55/25和34/20。

    你能帮我做一下算法吗。。我真的被难住了。我想我的数学成绩下降了=(在附加的链接中查找它,或者搜索GCD算法。几乎你会找到的任何算法都是为整数设计的。制作了这个,它就可以工作了!感谢私有的int GCD(int a,int b){if(b==0)返回a;else返回GCD(b,a%b);}你能帮我做算法吗..我真的被难住了。我想我的数学成绩下降了=(在附加的链接中查找,或者搜索GCD算法。你会发现几乎所有的算法都是为整数设计的。做了这个就行了!谢谢私有的int GCD(int a,int b){if(b==0)返回a;否则返回GCD(b,a%b);}