Given two numbers represented as strings, return multiplication of the numbers as a string.
Note: The numbers can be arbitrarily large and are non-negative.
这道题主要是考大数相乘
思路
将两个字符串转换成整型数组保存,用一个整型数组保存相乘的结果。这道题测试用例没有小数,不用考虑小数的问题。降低了难度
1 public class Solution { 2 public String multiply(String num1, String num2) { 3 final int SIZE = 500; 4 int array_num1[] = new int[num1.length()]; 5 int array_num2[] = new int[num2.length()]; 6 int array_result[] = new int[SIZE]; //保存大数相乘的结果 7 8 strToNum(num1, array_num1); //字符串转换成int[] 9 strToNum(num2, array_num2); 10 11 for(int i = 0; i < array_num1.length; i++){ 12 for(int j = 0; j < array_num2.length; j++){ 13 array_result[i + j] += array_num1[i] * array_num2[j]; 14 } 15 } //从低位按位相乘,结果保存到array_result[]数组中 16 int length = array_result.length; 17 while(length > 0 && array_result[--length] == 0); 18 19 //进位处理 20 for(int i = 0; i <= length; i++){ 21 array_result[i + 1] += array_result[i] / 10; //进位 22 array_result[i] = array_result[i] % 10; 23 }//for 24 length = SIZE; 25 while(length > 0 && array_result[--length] == 0); 26 String result = ""; 27 for(int i = length; i >= 0; i--){ 28 result += array_result[i]; 29 }//for 30 31 return result; 32 } 33 /** 34 * 字符串转换成整型数组 35 * @param str 36 * @param nums 37 */ 38 private void strToNum(String str, int nums[]){ 39 //nums[0]存放的是最低位 40 for(int i = str.length() - 1; i >= 0; i--){ 41 nums[str.length() - i - 1] = str.charAt(i) - '0'; 42 } 43 } 44 }
有关大数相乘,可以参考我的博客: