算法笔试题--两个字符串相加(长整数相加)
今天面试的时候遇到了这题,虽然脑子有了思路,但是因为时间关系没有手写出来,最后挂了,写成博客算是给自己一个警示
题目是这样的:
计算出两个长整数字符串相加的值,如果出错则返回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 }
作者水平有限,如有错误,欢迎指出

浙公网安备 33010602011771号