如何在java中使用googol甚至更大的数字进行计算?

问题描述 投票:0回答:4

这在理论上可能吗?即使

BigIntegers
也会失败,AFAIK,因为它们内部基于数组,并且它们的大小有限。 Java中是否可以直接用googolplexes的指数形式进行计算?例如:
((10^10^100)/2)-5

如何准备一份具有古戈尔大小的数字作为真实结果的申请?

(对于那些不知道的人:a

googol == 10^100
,a
googolplex == 10^10^100

java math biginteger
4个回答
5
投票

我认为你应该尝试符号数学库。符号数学库对方程结构执行运算,并不尝试在内部表示数字。

一些开始链接:

https://code.google.com/p/symja/

http://www4.ncsu.edu/~kaltofen/bibliography/99/BCK99.pdf

祝你好运。


1
投票

将其视为科学计数法计算的方式: 例如,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。让电脑也做同样的事情。


0
投票

进行逻辑计算,如子除法 12÷5。 考虑一个较长的数字 123456÷54321,并从 len 函数开始,这将使您能够识别 123456 中有两个 54321。因此,将 54321 的每个数字分开,然后分别乘以 2(保留第 10 次加到下一级)。现在对结果进行索引并从 123456 个数字的索引中减去。 编写一个 12÷5 的程序,您将能够除以 google 数字及以上的大数字。


-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"));

但是,是的,存储一个数字,而不是数字的符号,但是对于足够大的数字来说,数字的二进制表示是不可能的。

© www.soinside.com 2019 - 2024. All rights reserved.