gpt4 book ai didi

c# - 计算 2^(n) 其中 0
转载 作者:塔克拉玛干 更新时间:2023-11-03 03:13:04 24 4
gpt4 key购买 nike

所以,这是我要解决的问题:

我想计算 2^(n) 其中 0 < n< 10000

我将数组的每个元素表示为一个空间,其中 4 位数字应该是“有效的”,如果出现额外的数字,我会将其替换为该数组的下一个元素。

我使用的原理是这样的:

enter image description here

我使用的代码如下:

static string NotEfficient(int power)
{
if (power < 0)
throw new Exception("Power shouldn't be negative");
if (power == 0)
return "1";
if (power == 1)
return "2";

int[] A = new int[3750];

int current4Digit = 0;

//at first 2 is written in first element of array
A[current4Digit] = 2;

int currentPower = 1;

while (currentPower < power)
{
//multiply every 4digit by 2
for (int i = 0; i <= current4Digit; i++)
{
A[i] *= 2;
}

currentPower++;

//checking every 4digit if it
//contains 5 digit and if yes remove and
//put it in next 4digit
for (int i = 0; i <= current4Digit; i++)
{
if (A[i] / 10000 > 0)
{
int more = A[i] / 10000;
A[i] = A[i] % 10000;
A[i + 1] += more;

//if new digit should be opened
if (i + 1 > current4Digit)
{
current4Digit++;
}

}


}
}

//getting data from array to generate answer
string answer = "";

for (int i = current4Digit; i >= 0; i--)
{
answer += A[i].ToString() + ",";
}

return answer;
}

我遇到的问题是它没有正确显示数字,实际上它包含 0。例如 2 ^ (50) = 1 125 899 906 842 624 和我的算法我得到 1 125 899 96 842 624 (0 丢失)。这不仅适用于 50...

例如,当我遇到以下情况时会发生这种情况:

enter image description here

我怎样才能使这个算法更好?

最佳答案

使用 BigInteger,它已包含在 .Net Core 中或在 System.Runtime.Numerics Nuget Package 中可用.

static string Efficient(int power)
{
var result = BigInteger.Pow(2, power);
return result.ToString(CultureInfo.InvariantCulture);
}

在我的机器上,NotEfficient 大约需要 80 毫秒,而 Efficient 需要 0.3 毫秒。您应该能够操作该字符串(如果我正确理解您的问题陈述):

static string InsertCommas(string value)
{
var sb = new StringBuilder(value);

for (var i = value.Length - 4; i > 0; i -= 4)
{
sb.Insert(i, ',');
}

return sb.ToString();
}

关于c# - 计算 2^(n) 其中 0<n<10000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50708800/

24 4 0

Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com