说明
1、输入必须是正整数
2、代码正确无误,因为这个是一道力扣的题。传送门
3、思路:从一个输入值中分别切出来每一位,与另个值相乘,并将结果相加。切出来的值与另一个值相乘的方法也是一位一位的切出来,相乘得到结果,然后汇总起来。
4、优化除了字符串形式的结果生成可以改成StringBuilder再快点,别的,目测不能再优化了。
代码
package calculate;
public class Multiply {
public Multiply(){
System.out.println( mutiply("88", "2") );
}
public String mutiply( String num1, String num2 ){
//如果输入中存在0,直接返回结果
if ( num1.equals("0") || num2.equals("0") )
return "0";
//分别初始化num1,num2的长度,以及结果可能的最长长度
int len1 = num1.length();
int len2 = num2.length();
int len = len1 + len2;
//初始化数组形式的结果以及字符串形式的结果
int[] products = new int[len];
String product = "";
//拿num1第i个数分别乘num2
for ( int i = 0; i < len1; i++ ){
//获取num1的第i个数的整形值
// int number1 = Integer.parseInt( num1.substring(len1-i-1, len1-i) );
int number1 = num1.charAt(len1-i-1)-'0';
//进行乘法计算
for ( int j = 0; j < len2; j++ ){
//获取num2的第j个数的整形形式
// int number2 = Integer.parseInt( num2.substring(len2-j-1, len2-j) );
int number2 = num2.charAt(len2-j-1)-'0';
//进行数学运算
int sum = number1*number2+products[j+i];
products[j+i] = sum%10;
//将进位的值存储在下一位
products[j+i+1] += sum/10;
// System.out.println( number1 + "\t " + number2 + "\t " + products[j+i] + "\t " + products[j+i+1] );
}
//将已经计算过的较低位添加在字符串形式的结果集中
product = products[i]+product;
}
//因为前len1位已经添加在结果集中了,直接从len1开始就可以了
for ( int i = len1; i < len; i++ ){
//若首位为零了
if (products[i]==0 && i==len-1 ) continue;
product = products[i]+product;
}
return product;
}
public static void main(String[] args) {
Multiply multiply = new Multiply();
}
}