如何在 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 来添加或减去非常大的数字? 的相关文章

  • 在 Vulkan 中,图形队列系列与当前队列系列分离是否有益?

    据我所知 队列系列可能支持呈现到屏幕但不支持图形 假设我有一个同时支持图形和呈现的队列系列 以及另一个仅支持呈现的队列系列 我应该为两个进程使用第一个队列系列 还是应该将第一个队列系列委托给图形 将后者委托给呈现 或者这两种方法之间没有明显
  • 是否可以使用 http url 作为 DirectShow .Net 中源过滤器的源位置?

    我正在使用 DirectShow Net 库创建一个过滤器图 该过滤器图通过使用 http 地址和 WM Asf Writer 来流式传输视频 然后 在网页上 我可以使用对象元素在 Windows Media Player 对象中呈现视频源
  • EntityHydrate 任务失败

    我最近安装了 Visual Studio 11 Beta 和 Visual Studio 2010 之后 我无法在 Visual Studio 2010 中构建依赖于 PostSharp 的项目 因此我卸载了 Visual Studio 1
  • 为什么 C 程序使用 Scanf 给出奇怪的输出?

    我目前正在学习 C 编程 并且遇到了这个奇怪的输出 Program will try functionalities of the scanf function include
  • strlen() 编译时优化

    前几天我发现你可以找到编译时strlen使用这样的东西 template
  • 防止控制台应用程序中的内存工作集最小化?

    我想防止控制台应用程序中的内存工作集最小化 在Windows应用程序中 我可以这样做覆盖 SC MINIMIZE 消息 http support microsoft com kb 293215 en us fr 1 但是 如何在控制台应用程
  • 混合模型优先和代码优先

    我们使用模型优先方法创建了一个 Web 应用程序 一名新开发人员进入该项目 并使用代码优先方法 使用数据库文件 创建了一个新的自定义模型 这 这是代码第一个数据库上下文 namespace WVITDB DAL public class D
  • 用于在标头更改时重新编译的简单 C 项目的示例 makefile

    有谁有完整的 makefile 可以执行以下操作 如果 HEADER 文件发生更改 则重建项目 cpp 文件在 makefile 中列出 头文件未在 makefile 中列出 头文件允许与 cpp 文件具有不同的名称 部分cpp文件没有头文
  • C# 根据当前日期传递日期时间值

    我正在尝试根据 sql server 中的两个日期获取记录 Select from table where CreatedDate between StartDate and EndDate我通过了5 12 2010 and 5 12 20
  • OpenGL:如何检查用户是否支持glGenBuffers()?

    我检查了文档 它说 OpenGL 版本必须至少为 1 5 才能制作glGenBuffers 工作 用户使用的是1 5版本但是函数调用会导致崩溃 这是文档中的错误 还是用户的驱动程序问题 我正在用这个glGenBuffers 对于VBO 我如
  • wordexp 失败时我们需要调用 wordfree 吗?

    wordexp 失败时我们需要调用 wordfree 吗 在某些情况下 调用 wordfree 似乎会出现段错误 例如 当 wordfree 返回字符串为 foo bar 的错误代码时 这在手册页中并不清楚 我已经看到在某些错误情况下使用了
  • 在 azure blob 存储中就地创建 zip 文件

    我将文件存储在 Blob 存储帐户内的一个容器中 我需要在第二个容器中创建一个 zip 文件 其中包含第一个容器中的文件 我有一个使用辅助角色和 DotNetZip 工作的解决方案 但由于 zip 文件的大小最终可能达到 1GB 我担心在进
  • 如何从 Boost.PropertyTree 复制子树

    我有一些boost property tree ptree 我需要树来删除一些具有特定标签名称的元素 例如 xml 表示源ptree如下
  • 如何在C#中控制datagridview光标移动

    我希望 datagridview 光标向右移动到下一列 而不是在向单元格输入数据后移动到下一行 我试图通过 dataGridView1 KeyDown 事件捕获键来控制光标 但这并不能阻止光标在将数据输入到单元格后移动到下一行 提前感谢你的
  • 如何高效计算连续数的数字积?

    我正在尝试计算数字序列中每个数字的数字乘积 例如 21 22 23 98 99 将会 2 4 6 72 81 为了降低复杂性 我只会考虑 连续的数字 http simple wikipedia org wiki Consecutive in
  • 如何组合两个 lambda [重复]

    这个问题在这里已经有答案了 可能的重复 在 C 中组合两个 lambda 表达式 https stackoverflow com questions 1717444 combining two lamba expressions in c
  • Streamwriter 覆盖 txt 文件中的文本

    有没有什么方法可以重新打开流写入器而不创建新的写入对象 因为此时 当调用 WriteOdd 时 streamwriter 正在覆盖在它之前调用的 WriteEven public void WriteEven StreamWriter wr
  • winform c# 中的弹出窗口

    我正在开发一个需要弹出窗口的项目 但问题是我还希望能够通过表单设计器在此弹出窗口中添加文本框等 所以基本上我有一个按钮 当您单击它时 它将打开我在表单设计器中设计的另一个窗口 我一直在谷歌搜索 但还没有找到我需要的东西 所以我希望你们能帮助
  • 声明一个负长度的数组

    当创建负长度数组时 C 中会发生什么 例如 int n 35 int testArray n for int i 0 i lt 10 i testArray i i 1 这段代码将编译 并且启用 Wall 时不会出现警告 并且似乎您可以分配
  • 如果找不到指定的图像文件,显示默认图像的最佳方式?

    我有一个普通的电子商务应用程序 我将 ITEM IMAGE NAME 存储在数据库中 有时经理会拼错图像名称 为了避免 丢失图像 IE 中的红色 X 每次显示产品列表时 我都会检查服务器中是否有与该产品相关的图像 如果该文件不存在 我会将其

随机推荐

  • 如何在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 只是发现它是不允许的 应该有一个合乎逻辑的解决方法吗 我有一个想法 使用 小学方法 从右到左添加每个数字