0

我正在尝试生成具有 X 位数的大整数。我以为我已经弄清楚了,直到我意识到下面的代码正在创建位,而不是数字。我一直在试图找出一种体面的方法来创建数字而不是位。有人可以帮助我并指出正确的方向吗?直到现在我还没有使用过 BigInteger。哦,这是一个家庭作业问题,这就是我寻求帮助的原因,而不是一个确切的答案。再次感谢各位。

BigInteger X = new BigInteger(23000, new Random());
BigInteger Y = new BigInteger(23001, new Random());
BigInteger result =  X.multiply(Y);
4

3 回答 3

1

log2(10) =~ 3.321928,因此如果需要 23000 个十进制数字,则应指定 76404 位(23000*3.321928)。请注意,这将在区间 [0..10 23000 ] 中生成一个数字。该号码本身可能没有 23000 位数字。

如果你想强制它有 23000 位,你应该在 [0..10 22999 ] 范围内生成一个数字并添加 10 22999

于 2013-01-28T00:57:53.803 回答
1

您可能想要创建一个 char 数组,该数组的每个项目保存一个数字。而且你们很多人需要实现一个算法来乘以它。

如果你的作业需要考虑使用更少的内存,你可能想使用每个 char 来存储 2 位数字或使用一个整数来存储 9 位数字。

于 2013-01-28T09:16:20.310 回答
1

您在这里使用的是一个构造函数,BigInteger它接受 aint和 a并Random生成均匀分布在 to 范围内的a 。请参阅 BigInteger Oracle 文档——它将帮助您完成作业。BigInteger 0(2^(numBits) - 1)

编辑:

也许以下内容会有所帮助:计算机只能识别两个数字:0 和 1。

它们被称为

8 位代表一个八位字节

在当今的大多数计算机系统中,8 位也代表一个字节

所以下面的数:010以2为底(计算机识别的底),由3位组成,等于以10为底(人们广泛使用)到3。以10为底的4等于到 011 和 5 等于 100 - 希望你明白了。

用 3 位来表示一个数,就等于说你可以表示一个从 0 到 (2^(3) - 1)=7 的数。因此,3 位允许我们表示一个具有 1 位数字的数字。使用 4 位将允许我们表示范围从 0 到 (2^(4) - 1)=15 的数字 - 即具有两位数的数字。

现在你需要想出一种方法来告诉你如何找到代表数字的X位数。

于 2013-01-28T00:33:29.933 回答