2013-02-10 38 views
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 
?> 

但现在我必须扭转这种局面采取从整数的字符串。我试过但是失败了,请问有没有的方法来反转呢?

编辑:通过“任何方式”我的意思是它不必扭转到原来的文字,但只是为了扭转文字,给出的价值。

+1

我不这么认为(或者它会很难),因为'$ i'和'$ n'在你只有'$ b'时是未知的。 – Petah 2013-02-10 22:04:02

+0

是你的字符集“31”吗? – ogzd 2013-02-10 22:07:47

回答

0

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

如果字符串是任意的,那么没有;因为你将每个角色转换为数字的基数31表示,并将其移动并添加结果 - 但是,这种添加具有很多进位,所以不能仅仅从数字中计算出原始字符(即是结果的最终数字)。

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

2

没有,这不是...

容易例如:让我们分配每个字母的值:A = 1,B = 2,C = 3,d = 4等...

和这里我们走:你有“5” - 你不知道它是“ad”还是“bba”或“bc”等。