43. Multiply Strings
一、题目
1、审题
2、分析:
给定两个字符串,字符串形式为非负整数。在不使用 BigInteger 以及不把其转为 int 形式下 求该两数的乘积,返回结果为字符串。
二、解答
1、思路:
分析可知,num1 下标为 i 的数字与 num2 下标为 j 的数字相乘,所得的乘积为二位数字,且所在下标为新数组的下标为 i+j, i+j+1 两个位置。故可以用新数组存下两数的乘积。
public String multiply(String num1, String num2) { int len1 = num1.length(); int len2 = num2.length(); if(len1 == 0 || len2 == 0 || num1.equals("0") || num2.equals("0")) return "0"; int[] arr = new int[len1 + len2]; for (int i = len1 - 1; i >= 0; i--) { for (int j = len2 - 1; j >= 0; j--) { int index1 = i + j; int index2 = i + j + 1; int num = (num1.charAt(i) - '0') * (num2.charAt(j) - '0') + arr[index2]; arr[index2] = num % 10; arr[index1] += num / 10; } } StringBuffer sb = new StringBuffer(); if(arr[0] != 0) sb.append(arr[0]); for (int i = 1; i < arr.length; i++) { sb.append(arr[i]); } return sb.toString(); }