我的一位朋友前陣子遇到一個問題,問題的核心就是try……catch……finally中catch和finally代碼塊到底哪個先執。這個問題看起來很簡單,當然是“catch先執行、finally後執行”了?真的是這樣嗎? 有下麵一段C#代碼,請問這段代碼的執行結果是什麼? public static ...
編寫一個函數,返回兩個數字的和。輸入數字是字元串,函數必須返回一個字元串。
示例:
添加(“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"));