有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示。不能用系统自带的大整数类型。
输入描述:
空格分隔的两个字符串,代表输入的两个大整数
输出描述:
输入的乘积,用字符串表示
输入例子1:
72106547548473106236 982161082972751393
输出例子1:
70820244829634538040848656466105986748
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String s = sc.nextLine();
String[] s1 = s.split(" ");
System.out.println(multiply(s1[0],s1[1]));
}
}
private static String multiply(String s1,String s2){
String res = "";
if(s1.length() == 0 || s2.length() == 0) return "0";
int len = s2.length();
StringBuilder temp = new StringBuilder();
for(int i = len - 1;i >=0;i--){
temp = multiplyCore(s1,s2.charAt(i));
for(int j =len-1-i;j>0;j--){
temp.append('0');
}
res = add(res,temp.toString());
}
return res;
}
private static StringBuilder multiplyCore(String s1,char c){
StringBuilder sb = new StringBuilder();
int jinwei = 0;
int v = 0;
for(int i = s1.length() - 1;i >= 0;i--){
v = (s1.charAt(i) - '0') * (c - '0')+ jinwei;
jinwei = v / 10;
v = v % 10;
sb.insert(0,v);
}
if(jinwei > 0){
sb.insert(0,jinwei);
}
return sb;
}
private static String add(String s1,String s2){
int i = s1.length() - 1;
int j = s2.length() - 1;
int jinwei = 0;
int v = 0;
StringBuilder sb = new StringBuilder();
for(;i >= 0 && j>=0;i--,j--){
v = jinwei + (s1.charAt(i) - '0') + (s2.charAt(j) - '0') ;
jinwei = v / 10;
v = v % 10;
sb.insert(0,v);
}
while(j >= 0){
v = jinwei + (s2.charAt(j) - '0') ;
jinwei = v / 10;
v = v % 10;
sb.insert(0,v);
j--;
}
while(i >= 0){
v = jinwei + (s1.charAt(i) - '0') ;
jinwei = v / 10;
v = v % 10;
sb.insert(0,v);
i--;
}
if(jinwei > 0){
sb.insert(0,jinwei);
}
return sb.toString();
}
}