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

  • 【算法】编写一个函数,返回两个正数的和,有可能超过ulong长度已关闭评论
  • 106 次浏览
  • A+
所属分类:.NET技术
摘要

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

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

示例:

添加(“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("1111111111", 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"));