编写一个函数,返回两个数字的和。输入数字是字符串,函数必须返回一个字符串。
示例:
添加(“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"));