借助数组和进位变量
大数乘法
http://www.nowcoder.com/questionTerminal/c4c488d4d40d4c4e9824c3650f7d5571
借助数组,数组长度设置为二者相乘之后可能产生的最长的位数,即二者位数之和。然后按照乘法规则,逐个位置相乘,求出保留数和进位。
一次整体的内循环过程就是求一个中间结果的过程,外循环遍历完,则所有的中间结果也就求完了。
最终还需要判断最后的进位变量是否不为0,如果不为0,需要添加到最高位。
public static String solve (String s, String t) { // write code here if (s.length() == 0 || t.length() == 0){ return "0"; } String temp1 = s.length() >= t.length() ? s : t; String temp2 = s.length() >= t.length() ? t : s; StringBuilder long_str = new StringBuilder(temp1).reverse(); StringBuilder short_str = new StringBuilder(temp2).reverse(); int m = s.length(); int n = t.length(); int[] nums = new int[n + m]; int up = 0; for (int i = 0; i < short_str.length(); i++) { int k = i; up = 0; for (int j = 0; j < long_str.length(); j++) { int num1 = short_str.charAt(i) - '0'; int num2 = long_str.charAt(j) - '0'; int curRes = num1 * num2 + up + nums[k]; nums[k] = curRes % 10; up = curRes / 10; k++; } nums[k] += up; } if (up != 0){ nums[m + n - 1] = up; } StringBuilder sb = new StringBuilder(); for (int i = 0; i < nums.length; i++) { sb.append(nums[i]); } String res = sb.reverse().toString(); if (res.charAt(0)=='0'){ return res.substring(1); }else { return res; } }