给定两个字符串形式的非负整数 num1
和num2
,计算它们的和。
注意:
num1
和num2
的长度都小于 5100.num1
和num2
都只包含数字0-9
.num1
和num2
都不包含任何前导零。- 你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。
这道题比较简单,有一种主流的思路是模拟逻辑电路相加的做法。实现对字符串补0,让两个字符串都达到同样长度,然后再设置一个进位标志位,逐次相加。
这里要注意相加到最后的进位问题,记得增加进位位。
其他的做法不再累述,特别是使用Java做这个题,有点不务正业的感觉,因为Java把库都内建得很好了,代码中还是用到了把ASCII码转为字符的内建方法。
代码可以更加精炼,不过既然是模拟题,还是按部就班做出来比较好。
代码如下:
1 class Solution { 2 public String addStrings(String num1, String num2) { 3 int cf = 0; 4 String ans = ""; 5 String zerostr = ""; 6 if (num1.length() < num2.length()) { 7 for (int i = 0; i < num2.length() - num1.length(); i++) 8 zerostr += "0"; 9 num1 = zerostr + num1; 10 } else { 11 for (int i = 0; i < num1.length() - num2.length(); i++) 12 zerostr += "0"; 13 num2 = zerostr + num2; 14 } 15 System.out.println(num1 + " " + num2); 16 for (int i = num1.length(); i >= 0; i--) { 17 String tmpstr = ""; 18 int tmp1 = num1.charAt(i) - '0'; 19 int tmp2 = num2.charAt(i) - '0'; 20 if (tmp1 + tmp2 + cf >= 10) { 21 tmpstr = Integer.toString(tmp1 + tmp2 - 10 + cf); 22 cf = 1; 23 } else { 24 tmpstr = Integer.toString(tmp1 + tmp2 + cf); 25 cf = 0; 26 } 27 ans = tmpstr + ans; 28 } 29 if (cf == 1) 30 ans = "1" + ans; 31 32 return ans; 33 } 34 }