如何使用PHP创建自己的pow功能?

时间:2015-04-06 05:27:08

标签: php algorithm function math logic

我想创建一个函数,在其中我放置两个值(值及其功效 - 示例函数:multiply(3, 3)结果27)。到目前为止我已经尝试但失败了,我已经使用谷歌进行了搜索,但我找不到任何结果,因为我不知道这个函数的名称。

我想要的是什么:

3,3 => 3 x 3 x 3 = 27
4,4 => 4 x 4 x 4 x 4 = 256

我尝试了什么:

function multiply($value,$power){
    for($x = 1; $x <= $value; $x++ ){
        return $c = $value * $power;
    }   
}
echo multiply(3,3);

5 个答案:

答案 0 :(得分:9)

答案已被接受,但我不得不来这里说这里的所有答案都使用了一个糟糕的算法。有更好的。包括非常简单的,如exponentiation by squaring,可以降低从O(功率)到O(log(功率))的复杂性。

这个想法是在将指数除以2的同时对基数求平方。例如

3^8 = 9^4 = 81^2 = 6561

指数为奇​​数时有一种特殊情况。在这种情况下,您必须存储一个单独的变量来表示此因子:

2^10 = 4^5 = 16^2 * 4 = 256 * 4 = 1024

PHP并不是我强大的技能之一,但最终的算法很简单:

function multiply($value, $power){
    $free = 1;
    while ($power > 1) {
        if ($power % 2 == 1)
            $free *= $value;
        $value *= $value;
        $power >>= 1; //integer divison by 2
    }
    return $value*$free;
}
echo multiply(3, 3) . "\n";
echo multiply(2, 10) . "\n";
echo multiply(3, 8) . "\n";

答案 1 :(得分:4)

Oopsika,无法提出更明显的问题。使用名为 pow 的内置函数(与许多语言一样)

echo pow(3, 3);

修改

让我们创造自己的功能。

function raiseToPower($base,$exponent)
{
    // multiply the base to itself exponent number of times
    $result=1;
    for($i=1;$i<=$exponent;$i++)
    {
      $result = $result * $base;  
    }
    return $result;
}

答案 2 :(得分:3)

function exponent($value,$power)
{
    $c=1; 
    for($x = 1; $x <= $power; $x++ )
    {
        $c = $value * $c;
    } 
return $c;    
}

答案 3 :(得分:2)

  • 如果您有 PHP&gt; = 5.6 ,则可以使用**运算符
  

$ a ** $ b Exponentiation将$ a筹集到$ b&#39; th的结果。

echo 2 ** 3;
  • 如果你有 PHP&lt; 5.6 你可以使用pow:
  

数字pow(数字$ base,数字$ exp)

echo pow(2, 3);
  • 您自己的职能是:

function multiply($value, $power) {

    $result = 1;

    for($x = 1; $x <= $power; $x++){
        $result *= $value;
    }   

    return $result;
}

echo multiply(3,3);

阅读更多内容:

  

http://php.net/manual/en/language.operators.arithmetic.php

     

http://php.net/manual/en/function.pow.php

答案 4 :(得分:1)

尝试运行此代码我希望您的问题能够得到解决。 如果您定义任何函数,则必须将其称为返回值。

<?php
    function multiply($value,$exp)
    {    $temp=1;
        if($exp==0)
            return $temp;
        else
        {
             for($i=1;$i<=$exp;$i++)
             $temp=$temp*$value;
             return $temp;
        }

    }

    echo multiply(5,6);

    ?>