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

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

如果字符串是任意的,则否;因为您将每个字符转换为数字的 base-31 表示,将其移动并添加结果 - 但是,这种添加有很多进位,因此您不能仅从数字中计算出原始字符(即是,最终的数字)的结果。

编辑:鉴于您的编辑,是的,这是可能的。不过,这可能有点复杂——我会让你自己计算数学。试着用数字 31 玩一下。

于 2013-02-10T22:09:46.210 回答