私は配列の各部分で最大の整数を強制しながら、整数の配列で数学を実行しようとしています。これと同じように:整数の配列で数式を計算するとき、どのようにロールオーバーするのですか?
function add($amount) {
$result = array_reverse([0, 0, 0, 100, 0]);
$max = 100;
for ($i = 0; $i < count($result); ++$i) {
$int = $result[$i];
$new = $int + $amount;
$amount = 0;
while ($new > $max) {
$new = $new - $max;
++$amount;
}
$result[$i] = $new;
}
return array_reverse($result);
}
add(1); // [0, 0, 0, 100, 1]
add(100); // [0, 0, 0, 100, 100]
add(101); // [0, 0, 1, 0, 100]
これ以上の整数を追加すると動作が遅くなります。私はビット単位のシフトでこれをやろうとしてきましたが、近づいてきましたが、何らかの理由で動作させることができません。私は第三者の視点が必要だと思う。誰かがヒントを持っていますか?
よく、1つの簡単な最適化:無意味な配列逆転を停止します。 'for($ i = count(...); $ i> 0; $ i - )' –