是否可以让用户选择随机数的位数,特别是随机的Big Integer?例如,如果用户希望它长15位,则随机数生成器将仅生成15位长的大整数。
答案 0 :(得分:5)
您可以使用BigInteger
的构造函数来指定二进制数字的位数:BigInteger(int numBits, Random rnd)
。对于用户想要的每三个十进制数字,您需要大约十位二进制数字。例如,如果您需要30位随机BigInt
,请使用100个二进制数字。
您可以使用remainder(10^30)
切断不必要的数字,然后循环执行以确保初始数字不为零,确保正确的位数,如下所示:
Random rnd = new Random(123);
BigInteger tenPow30 = new BigInteger("10").pow(30);
BigInteger min = new BigInteger("10").pow(29);
BigInteger r;
do {
r = new BigInteger(100, rnd).remainder(tenPow30);
} while (r.compareTo(min) < 0);
System.out.println(r);
链接到demo。
答案 1 :(得分:4)
您始终可以随机生成该数字的个别数字。这样,对于15位数字,您可以随机生成15位数字,然后形成数字。
另一种方式:
让我们更改问题以生成随机的5位数字。
Min = 10000
Max = 99999
现在生成0
和Max - Min
之间的0
和89999
之间的随机数,并将其添加到Min
。
Random = Min + Math.random() * (Max - Min)
答案 2 :(得分:0)
以下是步骤:
StringBuilder
BigInteger(String)
这里有一些代码:
public static BigInteger randomBigInt(int digits, Random rand) {
StringBuilder sb = new StringBuilder(digits);
// First digit can't be 0
sb.append(rand.nextInt(9) + 1);
int limit = digits - 1;
for (int i = 0; i < limit; i++)
sb.append(rand.nextInt(10));
return new BigInteger(sb.toString());
}
这会分别生成每个数字,并将它们添加到StringBuilder
(而不是int
或其他东西,这会产生缓冲区溢出问题),然后使用结果String
创建BigInteger
。另请注意,第一个数字永远不会为0。
答案 3 :(得分:-1)
使用像here RandomUtil class这样的随机生成器,您可以在某些值和更多值之间创建随机数。
例如,使用此代码的范围是15位数 min = 100000000000000 max = 999999999999999:
BigInteger number = RandomUtil.getRandomBigInteger(new BigInteger("100000000000000"), new BigInteger("999999999999999"), false);