簡體   English   中英

這個算法是可逆的嗎?

[英]Is this algorithm reversible?

我有這個用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
?>

但現在我必須將其反轉以從整數中取出字符串。 我試過但它失敗了,有沒有辦法扭轉它?

編輯:通過“任何方式”我的意思是它不必反轉原始文本,而只是反轉給提供該值的文本。

不,這不對...

更簡單的例子:讓我們為每個字母分配一個值:a = 1,b = 2,c = 3,d = 4等...

我們走了:你有“5” - 你不知道它是“廣告”還是“bba”或“bc”等。

如果字符串可以保證只有小寫字母,它可以; 你必須弄清楚它的數學(我建議你在紙上算出算法,把字母留作變量;解決方程,你會看到如何反轉它)。

如果字符串是任意的,則不; 因為你將每個字符轉換為數字的基數31表示,移動它並添加結果 - 但是,這個添加有很多進位,所以你不能只從數字中找出原始字符(那個是結果的最終數字。

編輯:給你的編輯,然后是的,這是可能的。 但它可能有點復雜 - 我會讓你自己計算出數學。 嘗試用數字31來玩雜耍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM