0

私のプロジェクトでは、このアルゴリズムをPHPで記述しています。

<?php
$s = "abc"; //input -- string


$n = strlen($s);
$b = 0;
for ($i = 0; $i < $n; $i++)
{
$b += ord($s[$i]) * pow(31, ($n - ($i + 1)));
}


echo $b; //output -- int
?>

しかし、整数から文字列を取得するには、これを逆にする必要があります。試しましたが失敗しました。元に戻す方法はありますか?

編集:「とにかく」とは、元のテキストに戻す必要はなく、その値を与えるテキストに戻すだけであることを意味しました。

4

2 に答える 2

2

いいえ、ちがいます...

簡単な例:すべての文字に値を割り当てましょう:a = 1、b = 2、c = 3、d=4など...

そして、ここに行きます:あなたは「5」を持っています-あなたはそれが「ad」または「bba」または「bc」などであるかどうかわかりません。

于 2013-02-10T22:05:21.087 に答える
0

文字列に小文字のみが含まれることが保証されている場合は、それが可能です。そのための数学を理解する必要があります(文字を変数として残して、アルゴリズムを紙で解決することをお勧めします。方程式を解くと、それを逆にする方法がわかります)。

文字列が任意の場合、いいえ。各文字を数値のベース31表現に変換し、それをシフトして結果を加算しているためです。ただし、この加算には多くのキャリーが含まれているため、数字だけから元の文字を計算することはできません。は、結果の最終的な数値です)。

編集:あなたの編集が与えられれば、そうです、それは可能です。ただし、少し複雑になる可能性があります。数学を自分で解決するのはあなたに任せます。31という数字で少しジャグリングしてみてください。

于 2013-02-10T22:09:46.210 に答える