我需要使用Math.random生成26位数字,但是当我使用此代码时:
Math.floor(Math.random() * 100000000000000000000000000) + 900000000000000000000000000
我得到9.544695043285823e+26
答案 0 :(得分:1)
JavaScript(以及许多其他语言)中的浮点数只能包含about 15.955 digits,而不会降低精度。对于更大的数字,您可以查看JS库,或将几个数字连接为字符串。例如:
#include<stdio.h>
#include<string.h>
int main() {
char first[25], second[25];
int length1, length2;
printf("Enter the first and the second string: ");
scanf("%s %s", first, second);
length1 = strlen(first);
length2 = strlen(second);
order(first, second);
return 0;
}
int order(char *first, char *second) {
int i;
for (i = 0; first[i] && second[i] && first[i] == second[i]; i++)
if (first[i] && second[i]) {
return 1;
} else
return 0;
}
答案 1 :(得分:0)
如果我使用6十亿分之一的LG(约300万中的7,290万),但是当我切换到10百亿时,它像是10 ^ 999-99999 + 26,就像9-9-9-9-googolplex等于0 googolplex
答案 2 :(得分:0)
现代浏览器支持 BigInt
和 bigint
原始类型,我们可以将它与包含 8 个字节的随机生成数组结合起来(bigint
的大小为 8 个字节(64 位) ).
BigInt
性能明智我们可以生成一个长度为 16 个字符的随机十六进制字符串并将其直接应用于 BigInt
:
const hexString = Array(16)
.fill()
.map(() => Math.round(Math.random() * 0xF).toString(16))
.join('');
const randomBigInt = BigInt(`0x${hexString}`);
// randomBigInt will contain a random Bigint
document.querySelector('#generate').addEventListener('click', () => {
const output = [];
let lines = 10;
do {
const hexString = Array(16)
.fill()
.map(() => Math.round(Math.random() * 0xF).toString(16))
.join('');
const number = BigInt(`0x${hexString}`);
output.push(`${
number.toString().padStart(24)
} : 0x${
hexString.padStart(16, '0')
}`);
} while (--lines > 0);
document.querySelector('#numbers').textContent = output.join('\n');
});
<button id="generate">Generate</button>
<pre id="numbers"><pre>
BigInt
如果我们想要使用 Uint8Array
或者我们想要更多地控制位操作,我们可以将 Array.prototype.fill
与 Array.prototype.map
结合起来生成一个包含 8 个随机字节数值的数组(< strong>请注意,这比上述方法慢 50% 左右):
const randomBytes = Array(8)
.fill()
.map(() => Math.round(Math.random() * 0xFF));
// randomBytes will contain something similar to this:
// [129, 59, 98, 222, 20, 7, 196, 244]
然后我们使用 Array.prototype.reduce
来初始化一个零值的 BigInt
并将每个随机字节值左移 位置 X 8 位 并应用 按位或 em> 到每次 reduce
迭代的当前值:
const randomBigInt = randomBytes
.reduce((n, c, i) => n | BigInt(c) << BigInt(i) * 8n, 0n);
// randomBigInt will contain a random Bigint
BigInt
值的工作示例document.querySelector('#generate').addEventListener('click', () => {
const output = [];
let lines = 10;
do {
const number = Array(8)
.fill()
.map(() => Math.round(Math.random() * 0xFF))
.reduce((n, c, i) => n | BigInt(c) << BigInt(i) * 8n, 0n);
output.push(`${
number.toString().padStart(24)
} : 0x${
number.toString(16).padStart(16, '0')
}`);
} while (--lines > 0);
document.querySelector('#numbers').textContent = output.join('\n');
});
<button id="generate">Generate</button>
<pre id="numbers"><pre>