【算法】编写一个函数,返回两个正数的和,有可能超过ulong长度

算法,编写,一个,函数,返回,两个,正数,可能,超过,ulong,长度 · 浏览次数 : 64

小编点评

```csharp using System; using System.Text; public class Edm { public static string AddNumbers(string num1, string num2) { int n1 = num1.Length; int n2 = num2.Length; int maxSize = Math.Max(n1, n2); int carry = 0; string sum = ""; for (int i = 0; i < maxSize; i++) { int digit1 = (i < n1) ? int.Parse(num1[n1 - 1 - i]) - '0' : 0; int digit2 = (i < n2) ? int.Parse(num2[n2 - 1 - i]) - '0' : 0; int currentSum = digit1 + digit2 + carry; carry = currentSum / 10; sum = (currentSum % 10).ToString() + sum; } if (carry > 0) { sum = carry.ToString() + sum; } return sum; } } ```

正文

编写一个函数,返回两个数字的和。输入数字是字符串,函数必须返回一个字符串。

示例:

添加(“123”,“321”);->“444”

添加(“11”,“99”);->“110”

备注:

输入的数字很大,有可能超过ulong长度。

输入是一个只有数字的字符串。

数字是正数。

 


 

算法实现:

 1 using System;
 2 
 3 public class Edm
 4 {
 5     public static string AddNumbers(string num1, string num2)
 6     {
 7         int n1 = num1.Length;
 8         int n2 = num2.Length;
 9         
10         int maxSize = Math.Max(n1, n2); // 获取系统支持的最大长度
11     
12     int carry = 0; // 进位值
13     
14     string sum = ""; // 存储结果
15     
16     // 从最低位到最高位进行迭代
17     for (int i = 0; i < maxSize; i++)
18     {
19         // 从输入数字中获取当前位的数字,考虑前导零
20         int digit1 = (i < n1) ? num1[n1 - 1 - i] - '0' : 0;
21         int digit2 = (i < n2) ? num2[n2 - 1 - i] - '0' : 0;
22         
23         // 将当前位的数字与进位值相加
24         int currentSum = digit1 + digit2 + carry;
25         
26         // 更新进位值,并将和的最低位添加到结果中
27         carry = currentSum / 10;
28         sum = (currentSum % 10).ToString() + sum;
29     }
30     
31     // 如果还有剩余的进位值,将其添加到结果中
32     if (carry > 0)
33     {
34         sum = carry.ToString() + sum;
35     }
36         
37         return sum;
38     }
39 }

测试用例:


Assert.AreEqual("111111111011111111100", Edm.Add("12345678901234567890", "98765432109876543210"));
Assert.AreEqual("1000000000000000000", Edm.Add("999999999999999999", "1"));
Assert.AreEqual("12345678901234567891", Edm.Add("12345678901234567890", "1"));
Assert.AreEqual("11111111110", Edm.Add("99999999999", "1111111111"));
Assert.AreEqual("123456798", Edm.Add("999999999", "123456789"));

 

 

与【算法】编写一个函数,返回两个正数的和,有可能超过ulong长度相似的内容:

【算法】编写一个函数,返回两个正数的和,有可能超过ulong长度

编写一个函数,返回两个数字的和。输入数字是字符串,函数必须返回一个字符串。 示例: 添加(“123”,“321”);->“444” 添加(“11”,“99”);->“110” 备注: 输入的数字很大,有可能超过ulong长度。 输入是一个只有数字的字符串。 数字是正数。 算法实现: 1 using

【算法】编写一个函数,返回数字数组的“峰值”(或局部最大值)的位置和值。

编写一个函数,返回数字数组的“峰值”(或局部最大值)的位置和值。 例如,数组arr=[0,1,2,5,1,0]在位置3处具有值为5的峰值(因为arr[3]等于5)。 输出将以Dictionary<string,List<int>的形式返回,其中包含两个键值对:“pos”和“peaks”。如果给定的数

【算法】时间格式化-秒

编写一个函数,以人性化的方式将格式化时间,以秒为最小单位。 函数必须接受非负整数。如果它为零,它只返回“现在”。否则,持续时间表示为年、天、小时、分钟和秒的组合。 举个例子: *对于秒=62,您的函数应该返回 “1分2秒” *对于秒=3662,您的函数应返回 1小时1分2秒

【算法】用c#实现自定义字符串编码及围栏解码方法

编写一个函数/方法,它接受2个参数、一个字符串和轨道数,并返回ENCODED字符串。 编写第二个函数/方法,它接受2个参数、一个编码字符串和轨道数,并返回DECODED字符串。 然后使用围栏密码对其进行解码。 这种密码用于通过将每个字符沿着一组“竖状轨道”依次放在对角线上来对字符串进行编码。首先开始

【算法】找出平衡括号的排列组合

用c#编写一个函数,列出一个字符串列表,此字符串表示平衡n对括号的所有方法的排列组合。 示例:BalancedParens(0) returns List with element: ""BalancedParens(1) returns List with elem

复杂度分析:如何分析、统计算法的执行效率和资源消耗

我们都知道,数据结构和算法本身解决的是“快”和“省”的问题,即如何让代码运行得更快,如何让代码更省存储空间。所以,执行效率是算法一个非常重要的考量指标。那如何来衡量你编写的算法代码的执行效率呢?这里就要用到我们今天要讲的内容:时间、空间复杂度分析。

Ascend C sqrt算子实战

摘要:编写一个Ascend C的sqrt算子,并通过内核调用方式在cpu和npu模式下进行验证。 本文分享自华为云社区《【2023 · CANN训练营第一季】——Ascend C sqrt算子实战》,作者:dayao。 前言 编写一个Ascend C的sqrt算子,并通过内核调用方式在cpu和npu

应届生必考的斐波那契数列 优化版本

- 开题引入斐波那契 - 代码演示: 递归、循环 - 递归 vs 循环 - 时间复杂复高,指数型O(2^n); 推导过程 - 占用线程堆栈, 可能导致栈满异常 - 压测演示 - 20230816补充尾递归 ## 斐波那契数列 打入门软件开发,斐波那契数列便是绕不过去的简单编程算法。 一个老生常谈的思

C#中使用CAS实现无锁算法

CAS 的基本概念 CAS(Compare-and-Swap)是一种多线程并发编程中常用的原子操作,用于实现多线程间的同步和互斥访问。 它操作通常包含三个参数:一个内存地址(通常是一个共享变量的地址)、期望的旧值和新值。 CompareAndSwap(内存地址,期望的旧值,新值) CAS 操作会比较

算法金 | 推导式、生成器、向量化、map、filter、reduce、itertools,再见 for 循环

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 不要轻易使用 For 循环 For 循环,老铁们在编程中经常用到的一个基本结构,特别是在处理列表、字典这类数据结构时。但是,这东西真的是个双刃剑。虽然看起来挺直白,一用就上手,但是,有时