【问题标题】:What is the simplest way to get a ratio in PHP of multiple numbers?在 PHP 中获得多个数字的比率的最简单方法是什么?
【发布时间】:2011-03-27 18:08:50
【问题描述】:

我从网上找到的一个例子改编了这个......

function ratio($a, $b) {
    $_a = $a;
    $_b = $b;

    while ($_b != 0) {

        $remainder = $_a % $_b;
        $_a = $_b;
        $_b = $remainder;   
    }

    $gcd = abs($_a);

    return ($a / $gcd)  . ':' . ($b / $gcd);

}

echo ratio(9, 3); // 3:1

现在我希望它使用func_get_args() 并返回多个数字的比率。它看起来像一个递归问题,而且递归让我感到害怕(尤其是当我的解决方案无限循环时)!

如何修改它以获取我想要的尽可能多的参数?

谢谢

【问题讨论】:

  • “多个数字的比率”是什么意思?像2 : 3 : 5 这样的东西?您可以做的是首先计算数字列表中每个项目的素数分解。交点中的主要因子的乘积是最大公分母。然后就像在您的示例中一样计算相应的比率。

标签: php math function recursion


【解决方案1】:

第一,试试这个gcd函数http://php.net/manual/en/function.gmp-gcd.php 否则你必须定义一个像

这样的 gcd 函数
    function gcd($a, $b) {
        $_a = abs($a);
        $_b = abs($b);

        while ($_b != 0) {

            $remainder = $_a % $_b;
            $_a = $_b;
            $_b = $remainder;   
        }
        return $a;
    }

然后修改比例函数

    function ratio()
    {
        $inputs = func_get_args();
        $c = func_num_args();
        if($c < 1)
            return ''; //empty input
        if($c == 1)
            return $inputs[0]; //only 1 input
        $gcd = gcd($input[0], $input[1]); //find gcd of inputs
        for($i = 2; $i < $c; $i++) 
            $gcd = gcd($gcd, $input[$i]);
        $var = $input[0] / $gcd; //init output
        for($i = 1; $i < $c; $i++)
            $var .= ':' . ($input[$i] / $gcd); //calc ratio
        return $var; 
    }

【讨论】:

  • 谢谢!大多数 PHP 安装是否都安装了 GMD?
猜你喜欢
  • 2022-01-24
  • 1970-01-01
  • 2015-12-23
  • 2019-04-21
  • 2015-04-13
  • 2013-10-21
  • 1970-01-01
  • 2011-02-08
  • 1970-01-01
相关资源
最近更新 更多