gpt4 book ai didi

c# - 如何在 C# 中不使用 bigint 来添加或减去非常大的数字?

转载 作者:行者123 更新时间:2023-12-01 21:13:12 25 4
gpt4 key购买 nike

首先我要说的是,我是一个新手,对 C# 的了解很少到中等。

进入主题:我需要编写一个能够对非常大的整数进行加/减的程序。最初,使用 BigInt 只是发现它是不允许的。应该有一个合乎逻辑的解决方法吗?我有一个想法,使用“小学方法”,从右到左添加每个数字。

我制作了一个字符串,将其拆分为字符数组,并从右到左添加每个数字(GetUpperBound-i)。但似乎不起作用。

我的代码:

string s, s2;
char[] c_arr, c_arr2;
int i, erg;

s = "1234";
s2 = "5678";
c_arr = s.ToCharArray();
c_arr2 = s2.ToCharArray();
for (i = 0; i <= c_arr.GetUpperBound(0); i++)
{
erg = c_arr[c_arr.GetUpperBound(0)-i]+c_arr2[c_arr2.GetUpperBound(0)-i];
Console.Write(erg);
}

Console.ReadKey();

最佳答案

您的“小学方法”代码存在一些问题。您没有考虑进位,而是将 0-9 之间的 ascii 值而不是实际值相加,并且以错误的顺序输出结果。

下面的代码虽然不是很优雅,但确实产生了正确的结果:

var s1 = "12345";
var s2 = "5678";
var carry = false;
var result = String.Empty;

if(s1.Length != s2.Length)
{
var diff = Math.Abs(s1.Length - s2.Length);

if(s1.Length < s2.Length)
{
s1 = String.Join("", Enumerable.Repeat("0", diff)) + s1;
}
else
{
s2 = String.Join("", Enumerable.Repeat("0", diff)) + s2;
}
}


for(int i = s1.Length-1;i >= 0; i--)
{
var augend = Convert.ToInt32(s1.Substring(i,1));
var addend = Convert.ToInt32(s2.Substring(i,1));
var sum = augend + addend;
sum += (carry ? 1 : 0);
carry = false;
if(sum > 9)
{
carry = true;
sum -= 10;
}

result = sum.ToString() + result;
}

if(carry)
{
result = "1" + result;
}

Console.WriteLine(result);

关于c# - 如何在 C# 中不使用 bigint 来添加或减去非常大的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18946788/

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