给定两个字符串形式的非负整数 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 }