接上一篇整数的阶乘算法,来计算2个正整数的乘积;
算法如下:
- 用被乘数的右边第一位去乘乘数,每位的结果放入集合;然后从低位到高位进行满十进位;
- 用被乘数的右边第二位去乘乘数,每位的结果向左错一位放入集合;然后从低位到高位进行满十进位;
- 以此类推。。。。
具体代码如下:
package com.datastruct.array;
import java.util.ArrayList;
import java.util.List;
/**
* 计算任意2个正整数相乘
* @author ikon
*
*/
public class Multi {
public static void main(String[] args){
ConsoleReader console = new ConsoleReader(System.in);
System.out.print("请输入乘数 : ");
String num1 = console.readLine();
System.out.print("请输入被乘数 : ");
String num2 = console.readLine();
List<Integer> datas = new ArrayList<Integer>();
int digit = num2.length();
for(int i=0;i<digit;i++){
int num2i = Integer.parseInt(num2.substring(digit-1-i, digit-i));
for(int j=0;j<num1.length();j++){
int num1i = Integer.parseInt(num1.substring(num1.length()-1-j, num1.length()-j));
if(datas.size()==(j+i)){
datas.add(0);
}
datas.set(i+j, datas.get(i+j)+num1i*num2i);
}
for(int j=0;j<datas.size();j++){
if(datas.get(j)>9){
if(datas.size()==j+1){
datas.add(j+1,0); //这里要注意进位,调用add
}
datas.set(j+1, datas.get(j+1)+datas.get(j)/10);
datas.set(j, datas.get(j)%10);
}
}
}
System.out.print(num1+"*"+num2+"=");
for(int index=datas.size()-1;index>-1;index--){
System.out.print(datas.get(index));
}
}
}
BigInteger补充:
package com.datastruct.array;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
/**
* 计算任意2个正整数相乘
* BigInteger版
* @author ikon
*
*/
public class MultiBigInteger {
public static void main(String[] args){
ConsoleReader console = new ConsoleReader(System.in);
System.out.print("请输入乘数 : ");
String num1 = console.readLine();
System.out.print("请输入被乘数 : ");
String num2 = console.readLine();
BigInteger a = new BigInteger(num1);
BigInteger b = new BigInteger(num2);
System.out.print(num1+"*"+num2+"="+a.multiply(b));
}
}