emm算法设计书上讲了个基于递归分治法的一个方法,大概思路就是把比如两位数的乘法需要4次乘法运算变成只需要2次。emm我感觉一般还没大到要分治法来什么吧,就直接写了个模拟笔算的方法。
看代码:
package www.com.leetcode.specificProblem; //模拟笔算法 public class BigIntMultiply { public String bigIntMultiply(String a, String b) { StringBuilder sba = new StringBuilder(a); StringBuilder sbb = new StringBuilder(b); StringBuilder result = new StringBuilder(""); int[] num = new int[sba.length() + sbb.length()]; for(int i = sbb.length() - 1; i >= 0; i --) { int numB = sbb.charAt(i) - '0'; for(int j = sba.length() - 1; j >=0; j --) { int multiplyTemp = numB * ( sba.charAt(j) - '0' );//这个位乘法的结果 int resultTemp = (multiplyTemp % 10) + num[i + j + 1]; num[ i + j + 1] = resultTemp % 10;//这个i + j + 1是自己写了个竖式找规律找出来的 num[i + j] += (multiplyTemp / 10) + (resultTemp / 10);//第一个是这两个位相乘的进位,第二个是乘积的个位加上本来这个位上的数字后的进位 } } boolean begin = false; for(int intTemp : num) { if(intTemp != 0)begin = true;//第一次看到非0的数字就开始添加到字符串了 if(begin)result.append(intTemp); } return result.toString(); } public static void main(String[] args) { System.out.println(new BigIntMultiply().bigIntMultiply("1237", "998")); } }