2012-03-14 126 views
4

對於Pi Day,我試圖編寫一個試圖在Pi中查找給定單詞的Java程序(或另一個給定的非理性數字)。我幾乎已經完成了所有工作,但我對如何將pi的每個數字/數字轉換爲一個字母存在衝突。我想說:A = 01,B = 02,C = 03 ... Y = 25,Z = 26。將Pi轉換爲字母?

然而,對於所有沒有機會的窮號碼序列,我感覺不好,因爲任何不以「0」或「2」開頭的序列都將被完全忽略。這意味着80%的序列是不相關的?

我可以做一個base-26到base-10的轉換嗎?如果這確實是一個合適的解決方案,不知道如何以代碼方式做到這一點?

謝謝!

+0

您可以隨時檢查一位數字*和*有效的兩位數字。 – 2012-03-14 14:35:18

回答

5

您可以使用方法like this one將Pi從其base-10格式轉換爲任何其他基準(即基準26,其中只使用字母A-Z,而不是數字0-9)。由此產生的「數字」將是所有字母。

您必須修改fromDecimalToOtherBase方法,以便它只輸出字母。否則,它應該是非常簡單的,它是在十進制和任意任意基數之間進行轉換的相同算法。

只是踢,我還發現this page其中包含一個任意的基地轉換器。如果你輸入Pi沒有小數,並輸入「26」作爲目標基地,它會做轉換(儘管它仍然使用數字0-9,所以它不能「解決」問題,你想要的方式)。

+0

我想我只會將數字轉換爲使用您的方法的字母,然後查看它是否包含單詞。有沒有一種Java方法在字符串中查找字符串?我想我會發現!?謝謝大家! :) – 2012-03-14 14:52:49

+0

這應該讓你開始,雖然它可能不是搜索子字符串的最有效方法,並且取決於你使用的pi的數字和字典或單詞的長度,可能需要相當長的時間運行時間:http://www.exampledepot.com/egs/java.lang/SearchString.html – jefflunt 2012-03-14 15:03:50

+0

不String.indexOf()具有最差的O(N)行爲嗎?我只想找到給定單詞的第一個實例。我目前使用100K數字的pi和tau。將文件讀入數組並不需要太長時間,所以我認爲我應該在時間方面明智。 – 2012-03-14 15:28:02

3

您可以使字母換行並使用所有代碼。

00 = A 
01 = B 
... 
24 = Y 
25 = Z 
26 = A 
27 = B 
... 

或者,爲什麼還要考慮基數10?只需以26位開頭的數字表示,每個數字代表一個字母。

pi = D,DRSQLOLYRTRCLRGGUKBJKPSRFVKRODHLJRFSZSOXNHXZ...