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

2023-12-04

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

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

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

My Code:

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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 C# 中不使用 bigint 来添加或减去非常大的数字? 的相关文章

随机推荐

  • 如何在android 2.2上摇动

    有谁知道android 2 2的摇动代码是什么 我希望通过 Shake 来宣传我的申请 谢谢 尝试这个 put this into your activity class private SensorManager mSensorManag
  • 使用 javascript 将 CSV 文件读入数组

    我想做一些我认为相当简单的事情 但我错过了一些东西 我对 Javascript 很陌生 我正在尝试将 CSV 文件读入数组 在下面的代码中 我只是尝试将数据输出到警报框 我不断收到错误 访问被拒绝 function readTextFile
  • 将 SWF 转换为 EXE

    我正在 Actionscript 3 中构建一个程序 并且希望在不使用 Flash Pro CS5 的情况下将 SWF 文件转换为 EXE 我发现http swf to exe com 而且效果很好 但我想知道是否还有其他方法可以做到这一点
  • 是否可以在 Fortran 2003 中模拟混合抽象/延迟和常规过程?

    当我尝试将常规过程和延迟过程混合在一种抽象类型中时 gfortran 会阻止对常规过程的任何调用 错误 1 处类型绑定过程调用的基础对象是抽象类型 tbody type abstract tBody private contains pro
  • Express 不设置 cookie

    我在通过 Express 设置 cookie 时遇到问题 我在用着Este js dev stack我尝试在 API auth 中设置 cookie login路线 这是我使用的代码 api v1 auth login route res
  • 创建多个InternalResourceViewResolver

    我想知道我是否可以创建多个InternalResourceViewResolver在我的调度程序 servlet 中 像这样的东西
  • 将变量与 jquery 选择器一起使用

    我有以下几行代码 我想使用visibleoffer变量作为选择器 我怎样才能连接它 var visibleoffer obj parents tbody attr providername visible offers visibleoff
  • 无法使用 pyodbc 将 Sqlalchemy 连接到 SQL Server 2000

    我跟着这个website通过安装 Install sudo apt get install freetds dev freetds bin unixodbc dev tdsodbc pip install pyodbc sqlalchemy
  • NLog 可以通过 C# 扩展方法保存调用点信息吗?

    编辑 虽然类似 但这与有关使用 NLog 包装器的问题不同 扩展方法添加了另一个间接级别 这使得即使正确的包装器也会报告错误的调用点 我目前在 NLog 周围使用日志记录包装器 并使用他们在源代码中的示例中展示的技巧来获取准确的调用站点信息
  • 打开/处理 SharePoint 等 Word 文档

    当涉及到使用 ASP NET 在服务器上处理 Word 文档 docx 时 有人能给我指出正确的方向吗 我知道我可以使用提供的 API 写入和读取 docx 文档 但我想像 SharePoint 那样实现这一点 用户浏览网站 登录 然后选择
  • React Native导航传回参数两屏弹出

    我有一个主屏幕 然后将其推送到下一个进行选择 并将参数传递到下一个推送的屏幕 当您在该屏幕中选择某些内容时 我需要pop 2 并将选定的详细信息发送到主屏幕 But pop不接受参数 如何实现这一点 我不使用 Redux 或 MobX 你需
  • 如何对嵌套元组列表中的每个浮点进行舍入

    我有一个像这样的坐标列表 88 99716274669669 45 13003508233472 88 46889143213836 45 12912220841379 88 47075415770517 44 84090409706577
  • 如何用python打开zip中的csv?

    我一直在使用用户定义的函数来打开 ZIP 文件中包含的 CSV 文件 这对我来说非常有效 当 csv 文件保存在 Python 中的 zip 文件中时 如何从 URL 中抓取 csv 文件 现在我试图打开一个包含在一个 ZIP 中的 CSV
  • 根据周开始获取该月的周数

    我在我的应用程序中使用自定义日历 我已经为用户提供了选择一周第一天的选项 可以是 Saturday Sunday Monday 我想获取一个月中的周数 取决于一周的开始时间 覆盖周开始的默认值 Sunday Code public int
  • 放大和缩小自定义相机 - 空指针异常

    我正在尝试在我的自定义相机中实现放大和缩小功能 NullPointerException zoomControls setVisibility View GONE 我正在使用这个 相机中的缩放控制在 Android 中不起作用 Previe
  • 包含 Label 标签的链接在 IE 上不可点击

    我遇到过一种与一般 IE 兼容性不寻常的情况 以下链接在 IE 中无法点击 但在其他一切上都很好 我已经尝试过 IE8 及以上版本 a href http bbc co uk a
  • 双指针与单指针

    有人可以向我解释 推理为什么下面代码片段中主函数中变量 i 的值不会通过函数 test1 更改 而会通过 test2 更改吗 我认为单个指针应该足以改变 i 的值 为什么我们应该使用双指针 include
  • 转换为Unix时间时如何指定时区(UTC)? (Python)

    我有 IS8601 格式的 utc 时间戳 正在尝试将其转换为 unix 时间 这是我的控制台会话 In 9 mydate Out 9 2009 07 17T01 21 00 000Z In 10 parseddate iso8601 pa
  • 在 Webkit 中使用带有定位对象的剪切路径

    考虑这个简单的 SVG 文件
  • 如何在 C# 中不使用 bigint 来添加或减去非常大的数字?

    首先我要说的是 我是一个新手 对 C 的了解很少 回到主题 我需要制作一个能够对非常大的整数进行加 减的程序 最初 使用 BigInt 只是发现它是不允许的 应该有一个合乎逻辑的解决方法吗 我有一个想法 使用 小学方法 从右到左添加每个数字