这在理论上是否可行?即使BigIntegers
失败,AFAIK也是如此,因为它们内部基于数组,而且这些数据的大小有限。是否有可能用Java中的指数形式的googolplexes直接计算?例如:((10^10^100)/2)-5
如何准备一个具有googol大小数字作为真实结果的应用程序?
(对于那些不知道的人:googol == 10^100
,googolplex == 10^10^100
)
答案 0 :(得分:5)
答案 1 :(得分:1)
将其视为计算科学记数法计算的方式: 例如,2.574e100 * 4.762e15724可以计算为(2.574 * 4.762)e(100 * 15724),而不是分别计算2.574e100和4.762e15724,然后将它们相乘。
理论上可行,并且实施起来并不太困难。 Googol可以用两个整数表示,10和100,就像你在问题中所说的那样,#go; googol == 10 ^ 100"。
我上面所说的更简单的解释是: 您不会将googol写为100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,您可以将其写为10 ^ 100。让计算机也这样做。
答案 2 :(得分:-1)
为什么不使用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"));
但是存储数字,而不是数字的符号,但数字的二进制表示对于数字足够大是不可能的。