使用长数据类型计算C#中的2^N,其中N为1929439432949324
目前我需要计算使用长数据类型计算C#中的2^N,其中N为1929439432949324,c#,numbers,exponential,C#,Numbers,Exponential,目前我需要计算2^N,但是N可能会大到1929238932899,而且我使用的数据类型太长,不能容纳那么大的数字 我目前已经尝试转换为“BigInt”,但我仍然受到我所看到的长数据类型限制的困扰 我有一个计算功率的函数。但是,对于long数据类型,当数字太大时,它只返回0。请注意,这只是一个通用的递归幂函数 例如,使用2^6表示返回64,使用2^47表示返回140737488355328。但是,当它变成2^8489289时,它只返回0。要以二进制形式表示2^N,需要N+1位(二进制数字),即 (
2^N
,但是N
可能会大到1929238932899,而且我使用的数据类型太长,不能容纳那么大的数字
我目前已经尝试转换为“BigInt”,但我仍然受到我所看到的长数据类型限制的困扰
我有一个计算功率的函数。但是,对于long数据类型,当数字太大时,它只返回0。请注意,这只是一个通用的递归幂函数
例如,使用
2^6
表示返回64,使用2^47
表示返回140737488355328。但是,当它变成2^8489289
时,它只返回0。要以二进制形式表示2^N,需要N+1位(二进制数字),即
(1 929 439 432 949 324+1)/8=241 179 929 118 665.6字节~219 PiB表示单个数字,如果您确实想使用它
或者你可以用二进制形式写下2^N:1后跟N个零。因为2^N是一个整数,你可以用 您可以将其放在这样的类中:
class FactorizedInteger {
private Dictionary<long, long> _factors = new Dictionary<long, long>();
public FactorizedInteger(long radix, long exponent) {
_factors[radix] = exponent;
}
public void Add(FactorizedInteger other) {
foreach(var factor in other._factors) {
if (_factors.ContainsKey(factor.Key)) {
_factors[factor.Key] += factor.Value;
} else {
_factors[factor.Key] = factor.Value;
}
}
}
public override string ToString() {
return "(" + String.Join(" + ", _factors.Select(p => $"{p.Key}^{p.Value}")) + ")";
}
}
输出:
(2^1929238932899)
(2^1929238932963)
这个例子需要做得更聪明才能真正有用,但它可能代表如此大的数字。显然
long
只能fir 2^63。。。到目前为止,还不清楚你想用长值实现什么目标……如果你能分享你迄今为止的尝试,那就太棒了。如果你不需要将其表示为十进制,这很简单-2^N可以用二进制写成1,后跟N个零…@Murls隐式表示数字不是问题:2^1929238932899
是一种表示。但这是否是一个有用的表示法取决于你想如何处理这个数字。打印出这个值(十进制)要花10分钟以上的时间,但你没有打印出来,所以没有进行比较。你的问题最大的问题是,你没有说明你将如何利用价值,因此没有人能真正有效地帮助你。不要喂鸽子。不要喂鸽子。和
(2^1929238932899)
(2^1929238932963)