在PHP中查找pow()的反义词

eagi6jfj  于 2022-11-28  发布在  PHP
关注(0)|答案(2)|浏览(169)

我正在研究的数学问题的公式是:A[i] *(-2)i的幂
其中i=0,1,2,3,...
A是值为0或1的数组
输入数组:[0,1,1,0,0,1,0,1,1,1,0,1,0,1,1]
输出为:5730

代码

$totalA = 0;
foreach ($A as $i => $a) {
     $totalA += $a * pow(-2, $i);
}

这是正确的。现在我在寻找它的对立面,比如:
输入为:5730
输出将为:[0,1,1,0,0,1,0,1,1,1,0,1,0,1,1]
我并不是要确切的代码,而是要从我应该开始的地方寻找一些逻辑。我试图使用log()方法,但没有返回所需的输出。

bpsygsoo

bpsygsoo1#

您并不是在寻找精确的代码,但我发现这个问题太有趣了。

function sign($n) {
    return ($n > 0) - ($n < 0);
}

$target = -2396;
$i = 0;
$currentSum = 0;

// Look for max $i
while (true) {
    $val = pow(-2, $i);
    $candidate = $currentSum + $val;
    if (abs($target) <= abs($candidate)) {
        // Found max $i
        break;
    }
    if (abs($target - $candidate) < abs($target - $currentSum)) {
        // We are getting closer
        $currentSum = $candidate;
    }
    $i++;
}

$result = [];
for ($j = $i; 0 <= $j; $j--) {
    $val = pow(-2, $j);
    $border = $val / 4;
    if (sign($val) == sign($target) && abs($border) < abs($target)) {
        array_unshift($result, 1);
        $target -= $val;
    } else {
        array_unshift($result, 0);
    }
}

echo json_encode($result);

首先,我寻找$i,它使我位于$target之上或略高于$target。当找到时,我向下走,并决定每一位是否应该在结果中。

von4xj4u

von4xj4u2#

简单答案是PHP

pow(3,4) it will generate 81
Reverse is
log(81,3)  it will generate 4

相关问题