算法笔试题--两个字符串相加(长整数相加)

今天面试的时候遇到了这题,虽然脑子有了思路,但是因为时间关系没有手写出来,最后挂了,写成博客算是给自己一个警示

题目是这样的:

计算出两个长整数字符串相加的值,如果出错则返回ERROR

下面贴上我的代码

 1 public class StringIntNumPlus {
 2     public static void main(String[] args) {
 3 
 4         System.out.println(plusString("1", "1")); //2
 5         System.out.println(plusString("1232131248979879", "1")); //1232131248979880
 6         System.out.println(plusString("1232131248979879", "9231234545323423")); //10463365794303302
 7         System.out.println(plusString("A", "9231234545323423")); //ERROR
 8 
 9     }
10 
11     public static String plusString(String num1, String num2) {
12         try {
13             StringBuilder num1sb = new StringBuilder(num1).reverse();
14             StringBuilder num2sb = new StringBuilder(num2).reverse();
15             StringBuilder result = new StringBuilder();
16             int num1Length = num1sb.length();
17             int num2Length = num2sb.length();
18             int maxLength = num1Length > num2Length ? num1Length : num2Length;
19             int next = 0;
20             if (num1Length > num2Length) {
21                 for (int i = 0; i < num1Length - num2Length; i++) {
22                     num2sb.append("0");
23                 }
24             } else {
25                 for (int i = 0; i < num2Length - num1Length; i++) {
26                     num1sb.append("0");
27                 }
28             }
29             char[] num1chars = num1sb.toString().toCharArray();
30             char[] num2chars = num2sb.toString().toCharArray();
31 
32             for (int i = 0; i < maxLength; i++) {
33                 int num = Integer.parseInt(num1chars[i] + "") + Integer.parseInt(num2chars[i] + "") + next;
34                 next = 0;
35                 if (i != maxLength - 1){
36                     if (num >= 10){
37                         next = 1;
38                         result.append(num - 10);
39                     }else {
40                         result.append(num);
41                     }
42                 // 最后一位要特殊处理,如果相加大于10要多加1位
43                 }else{
44                     if (num >= 10){
45                         result.append(num - 10);
46                         result.append(1);
47                     }else {
48                         result.append(num);
49                     }
50                 }
51             }
52             return  result.reverse().toString();
53         } catch (Exception e) {
54             return "ERROR";
55         }
56     }
57 }

 

posted @ 2020-08-05 18:52  MrTangerine  阅读(481)  评论(0)    收藏  举报