我试图计算一个很大的数字,它需要BigInteger.Pow(),但我需要指数也是BigInteger,而不是int。
即
BigInteger.Pow(BigInteger)我怎样才能做到这一点?
编辑:,我想出了一个答案。用户dog帮助我实现了这一点。
public BigInteger Pow(BigInteger value, BigInteger exponent)
{
BigInteger originalValue = value;
while (exponent-- > 1)
value = BigInteger.Multiply(value, originalValue);
return value;
}发布于 2015-05-13 20:31:18
从一般数学的角度来看,这是没有道理的。这就是它没有实现的原因。
想一想这个例子:您的BigInteger编号是2,您需要将其增强到1024。这意味着结果是一个1KB的数字(2^1024)。现在假设您使用int.MaxValue:那么,您的数字将消耗2GB的内存。使用BigInteger作为指数将产生一个超出内存容量的数字!
如果你的应用程序需要这个比例的数字,而这个数字本身对于你的内存来说太大了,你可能想要一个分别存储数字和指数的解决方案,但这是我只能推测的,因为它不是你问题的一部分。
如果您的问题是指数变量是BigInteger,则只需将其转换为int:
BigInteger.Pow(bigInteger, (int)exponent); // exponent is BigInteger发布于 2015-05-13 20:55:08
Pow(2,for 64,requires )需要1,152,921兆字节才能保持这个数字,以获得一种规模感。但这是一个函数,如果你有一台非常好的电脑。
static BigInteger Pow(BigInteger a, BigInteger b) {
BigInteger total = 1;
while (b > int.MaxValue) {
b -= int.MaxValue ;
total = total * BigInteger.Pow(a, int.MaxValue);
}
total = total * BigInteger.Pow(a, (int)b);
return total;
}发布于 2015-05-13 20:36:46
正如其他人所指出的那样,将某件事情提升到比int的容量更高的水平是个坏消息。但是,假设您知道这一点,并且只是以BigInteger的形式得到指数,那么您可以直接转换为int,然后继续您的快乐之路:
BigInteger.Pow(myBigInt, (int)myExponent);或者,更好的,
try
{
BigInteger.Pow(myBigInt, (int)myExponent);
}
catch (OverflowException)
{
// Do error handling and stuff.
}https://stackoverflow.com/questions/30224589
复制相似问题