这在理论上可能吗?即使
BigIntegers
也会失败,AFAIK,因为它们内部基于数组,并且它们的大小有限。 Java中是否可以直接用googolplexes的指数形式进行计算?例如:((10^10^100)/2)-5
如何准备一份具有古戈尔大小的数字作为真实结果的申请?
(对于那些不知道的人:a
googol == 10^100
,a googolplex == 10^10^100
)
我认为你应该尝试符号数学库。符号数学库对方程结构执行运算,并不尝试在内部表示数字。
一些开始链接:
https://code.google.com/p/symja/
http://www4.ncsu.edu/~kaltofen/bibliography/99/BCK99.pdf
祝你好运。
将其视为科学计数法计算的方式: 例如,2.574e100 * 4.762e15724 可以计算为 (2.574 * 4.762)e(100*15724),而不是分别计算 2.574e100 和 4.762e15724,然后将它们相乘。
所以理论上是可行的,而且实现起来也不太困难。 Googol 可以用两个整数 10 和 100 表示,就像您在问题中说“a googol == 10^100”时所做的那样。
我上面所说的更简单的解释是: 你不会把 googol 写成 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ,你会写成 10^10 0。让电脑也做同样的事情。
进行逻辑计算,如子除法 12÷5。 考虑一个较长的数字 123456÷54321,并从 len 函数开始,这将使您能够识别 123456 中有两个 54321。因此,将 54321 的每个数字分开,然后分别乘以 2(保留第 10 次加到下一级)。现在对结果进行索引并从 123456 个数字的索引中减去。 编写一个 12÷5 的程序,您将能够除以 google 数字及以上的大数字。
为什么不使用
BigInteger
?
这有效:
String googolString = "1";
for (int i = 0; i < 100; ++i) {
googolString += "0";
}
BigInteger googol = new BigInteger(googolString);
String googolPlexString = "1";
BigInteger googolPlex;
for (int i = 0; i < googolString.length() - 1; ++i) {
for (int j = 0; j < 100; ++j) {
googolPlexString += "0";
}
}
googolPlex = new BigInteger(googolPlexString);
googolPlex = googolPlex.divide(new BigInteger("2"));
googolPlex = googolPlex.subtract(new BigInteger("5"));
但是,是的,存储一个数字,而不是数字的符号,但是对于足够大的数字来说,数字的二进制表示是不可能的。