题目
有两个数组:int[] a = {1,2,3,4}; int[] b = {5,6,7}; 请实现add(a, b);算法,计算两个数组相加的值int c [] = {1,8,0,1}; 即1234+567=1801。
解答
算法一
将字符串转换为数字,计算出c=a+b后,再将c转换为字符串输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| public class ArrayAddition { public static int[] add(int[] a, int[] b) { StringBuilder num1 = new StringBuilder(); StringBuilder num2 = new StringBuilder(); for (int i : a) { num1.append(i); } for (int i : b) { num2.append(i); } int number1 = Integer.parseInt(num1.toString()); int number2 = Integer.parseInt(num2.toString()); int sum = number1 + number2; String sumString = String.valueOf(sum); int[] result = new int[sumString.length()]; for (int i = 0; i < sumString.length(); i++) { result[i] = Character.getNumericValue(sumString.charAt(i)); } return result; }
public static void main(String[] args) { int[] a = {1, 2, 3, 4}; int[] b = {5, 6, 7}; int[] c = add(a, b); for (int value : c) { System.out.print(value); } } }
|
算法二
对位相加,短的数组前面补0,最终结果无进位需要去掉:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| import java.util.Arrays;
public class ArrayAddition { public static int[] add(int[] a, int[] b) { int maxLength = Math.max(a.length, b.length); int[] result = new int[maxLength + 1]; int carry = 0; for (int i = 0; i < maxLength; i++) { int digitA = i < a.length ? a[a.length - 1 - i] : 0; int digitB = i < b.length ? b[b.length - 1 - i] : 0; int sum = digitA + digitB + carry; result[result.length - 1 - i] = sum % 10; carry = sum / 10; } result[0] = carry; if (result[0] == 0) { result = Arrays.copyOfRange(result, 1, result.length); } return result; }
public static void main(String[] args) { int[] a = {1, 2, 3, 4}; int[] b = {5, 6, 7}; int[] c = add(a, b); for (int value : c) { System.out.print(value); } } }
|