ホームページ >バックエンド開発 >PHPチュートリアル >最も近い値を見つけることに関連する問題があります。いくつかのアイデアを教えてください。

最も近い値を見つけることに関連する問題があります。いくつかのアイデアを教えてください。

WBOY
WBOYオリジナル
2016-06-13 13:14:21993ブラウズ

最も近い値を見つける問題です。アイデアを教えてください
何かを作るには、A の値がわかっている場合、B を見つける必要があります。B の値は A より小さく、2 の平方数です。
例: A=765、B が必要な場合、B は 512 に等しくなります。 Aの値が最大範囲なので、2の1乗、2の2乗、2の3乗という方法を考えました。 。 。 。 、配列として保存され、A 値がこの配列と比較されて、要件を満たす B 値が検索されます。

しかし、もっと良い方法があるはずだと思います。いくつかアイデアを教えてください。ありがとう!

-----解決策---------
function get2str($n)
{
$len = strlen(decbin($n));
$str2 = '1'.str_repeat('0', $len-1);
return binding($str2); 🎜>}
var_dump(get2str(578));
// int(512)
アイデアは次のとおりです:
4: 100 3
8: 1000 4
16: 10000 5
32: 100000 6
64: 1000000 7
128: 10000000 8
256: 100000000 9
512: 1000000000 10
1024: 10000000000 11
2048: 100000000000 12
578: 1001000010 10
これらが 10 進数であることがわかります: バイナリ文字列の長さ
578 と 512 のバイナリ文字列の長さは両方とも 10 バイトです。 PHP でビット演算を行う方法がわからないので、もっと効率的で簡単な解決策があるはずだと考えました。

------解決策---------指数と対数を確認してください

PHP コード

$a = 765; echo pow(2, Floor(log($a, 2)));
<br>------解決策-----------<font color="#e78608"></font>1、一番左の1、ビット演算をそのままにしておきます。 <br><br>PHP コード
[liangdong@bb-browser-test00.vm.baidu.com php_project]$ php main.php 765 => 512 0 => 0 256 => 256 1 => 1 3 => 2 255 => 128 257 => 256 [liangdong@bb-browser-test00.vm.baidu.com php_project]$ cat main.php > $off) != 1) { ++ $オフ; } 1 << $off を返します。 } } $cases = 配列(765, 0, 256, 2.3, 1, 3, 255, 257); foreach ($cases を $value) { if (($ret = bit_alg($value)) !== false) { echo $value . $ret . } } ?>
<br>------解決策---------<font color="#e78608"></font>バイナリで計算する場合、<br> PHP コード
$A = 765; $t = decbin($A); echo binding(str_pad(1, strlen($t), '0'));
<br>------解決策---------<font color="#e78608"></font><br>
話し合う
バイナリ モードで計算される場合、PHP コード
$A = 765;
$t = decbin($A);
echo binding(str_pad(1, strlen($t)) 、'0'));

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。