2013-02-10 47 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」等。