我要计算:
let n1 = BigInt(256);
let n2 = BigInt(1024);
let n3 = BigInt(3);
let n4 = BigInt(40);
let res = n1.pow(n2.pow(n3) * n4);
let len = res.to_string().len();
我尝试了
num
crate,但它的 pow()
方法仅支持 u32 作为指数。有没有支持 BigInt 作为指数的板条箱?还是太大而无法计算?
不是
BigInt.pow(&BigInt)
的答案,而只是这个特定问题的答案。这篇文章中的问题是“这个数字有多少位?”它可以转化为数学问题。
首先简化这个表达式。
BigInt(256).pow(BigInt(1024).pow(BigInt(3)) * BigInt(40))
=> 256 ^ (1024 ^ 3 * 40)
=> 2 ^ (2^36 * 5)
“有多少位”可以通过十进制数“log(10, X)”来计算。
log(10, 2 ^ (2^36 * 5))
= 2 ^ 36 * 5 * log(10, 2)
这很容易计算。结果大约是
103433118919.34569
。