gpt4 book ai didi

c# - c# 中更简单的大加法器?

转载 作者:行者123 更新时间:2023-11-30 12:37:20 29 4
gpt4 key购买 nike

我刚刚在学校完成了编写一个大加法器的任务。意思是一种可以将非常大的数字放在一起的方法。我们有 10 分钟的时间,我确实按时完成了。老师同意了。

虽然我对结果不太满意,我认为我可能采取了错误的方法。

这是我的版本:

using System;
using System.Text;

namespace kæmpe_adder
{
static class Program
{
static void Main()
{
var x = "1111";
var y = "111111111";

Console.WriteLine(BigAdder(x, y));
Console.ReadLine();
}
public static StringBuilder BigAdder(string x, string y)
{
var a = new StringBuilder(x);
var b = new StringBuilder(y);
return BigAdder(a, b);
}
public static StringBuilder BigAdder(StringBuilder x, StringBuilder y)
{
int biggest;
int carry = 0;
int sum;
var stringSum = new StringBuilder();

if (x.Length > y.Length)
{
y.FillString(x.Length - y.Length);
biggest = x.Length;
}
else if (y.Length > x.Length)
{
x.FillString(y.Length - x.Length);
biggest = y.Length;
}
else
{
biggest = y.Length;
}

for (int i = biggest - 1; i >= 0; i--)
{
sum = Convert.ToInt32(x[i].ToString()) + Convert.ToInt32(y[i].ToString()) + carry;
carry = sum / 10;
stringSum.Insert(0, sum % 10);
}

if (carry != 0)
{
stringSum.Insert(0, carry);
}

return stringSum;
}
public static void FillString(this StringBuilder str, int max)
{
for (int i = 0; i < max; i++)
{
str.Insert(0, "0");
}
}
}
}

当我写它的时候,我想到了你如何用二进制文件来做。

是否有更短和/或更简单的方法来做到这一点?

最佳答案

从代数的角度来看,您的代码看起来是正确的。从设计的角度来看,您肯定更愿意将这些大数字中的每一个都封装在一个类中,这样您就不必一直引用字符串/字符串构建器。我也不是这种 FillString 方法的忠实粉丝,当两个数字都具有非零值时添加数字似乎更合理,然后将进位添加到更大的数字直到完成。

不确定二进制文件的问题是什么?正常长度数字(32 位和 64 位)由 CPU 作为单个操作添加。

关于c# - c# 中更简单的大加法器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1340397/

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