2012-03-14 127 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...