这个算法是可逆的吗?

时间:2013-02-10 22:02:14

标签: php algorithm

我为我的项目用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
?>

但现在我必须将其反转以从整数中取出字符串。我试过但它失败了,是否有任何方法来反转它?

编辑:通过“任何方式”,我的意思是它不必反转原始文本,而只是反转给提供该值的文本。

2 个答案:

答案 0 :(得分:2)

不,这不是......

更简单的例子:让我们为每个字母分配一个值:a = 1,b = 2,c = 3,d = 4等......

我们走了:你有“5” - 你不知道它是“广告”还是“bba”或“bc”等。

答案 1 :(得分:0)

如果字符串可以保证只有小写字母,它可以;你必须弄清楚它的数学(我建议你在纸上算出算法,把字母留作变量;求解方程式,你就会看到如何反转它)。

如果字符串是任意的,则不;因为你将每个字符转换为数字的基数31表示,移动它并添加结果 - 但是,这个添加有很多进位,所以你不能只从数字中找出原始字符(那个是结果的最终数字。

编辑:给出您的编辑,然后是的,这是可能的。但它可能有点复杂 - 我会让你自己计算出数学。尝试用数字31来玩杂耍。