1.先看俩个数字是怎么相乘
第一步为每个数字对应相乘,第二步为对应相加 ,第三步为进位.
第一步中数字相乘相当于数组中每个数字对应相乘,并保存到相应的位置里面去.第二步对应相加是把第一步的结果相加保存,第三步则是进行进位处理,当前位置数字超过10则进位,进位原理为当前数字%10 保存到下一位置里面.
具体实现代码如下
public static void main(String[] args){
String result = getResult("999999999999999999","8888888888888888888");
System.out.println(result);
}
/**
* 获取俩个大数相乘
* @param num1
* @param num2
* @return
*/
public static String getResult(String num1, String num2) {
//转换成int数组
int aArray[] = getStringArray(num1);
int bArray[] = getStringArray(num2);
int result[] = new int[num1.length() + num2.length()];
//数组对应位数相乘并保存
for(int i = 0 ; i < aArray.length ;i++){
int aTempNum = aArray[i];
for(int j = 0 ;j < bArray.length ; j++){
int bTempNum = bArray[j];
int cTempNum = result[i+j];
cTempNum = cTempNum + aTempNum * bTempNum;
result[i + j] = cTempNum;
}
}
//进位,最后一位一定是0-9,不需要进位操作!!!!
for(int i = 0; i < result.length - 2 ; i++){
int a = result[i]%10;
int b = result[i]/10;
result[i] = a;
result[i + 1] = result[i + 1] + b;
}
//拼接最终结果,结果记得倒序拼接
String resultStr = "";
for(int i = result.length - 1; i >= 0 ; i--){
if(i < result.length - 1){
resultStr = resultStr + result[i];
}else if(i == result.length - 1 && result[result.length - 1] > 0){
//去除首位0时也进行拼接操作
resultStr = resultStr + result[i];
}
}
return resultStr;
}
/**
* String 转换成int数组
* @param str
* @return
*/
public static int[] getStringArray(String str){
int date[] = new int[str.length()];
char[] temp = str.toCharArray();
for(int i = 0 ;i<= str.length() - 1 ; i++){
String tempStr = String.valueOf(temp[str.length() - 1 - i]);
date[i] = Integer.parseInt(tempStr);
}
return date;
}