Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用长数据类型计算C#中的2^N,其中N为1929439432949324_C#_Numbers_Exponential - Fatal编程技术网

使用长数据类型计算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)