有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示。不能用系统自带的大整数类型。
输入描述:
空格分隔的两个字符串,代表输入的两个大整数
输出描述:
输入的乘积,用字符串表示
输入例子1:
72106547548473106236 982161082972751393
输出例子1:
70820244829634538040848656466105986748
最佳答案
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String num1 = in.nextBigDecimal().toString();
String num2 = in.nextBigDecimal().toString();
//保存结果
int[] ret = new int[num1.length() + num2.length()];//整形数组未初始化,默认值为0
for (int i = num1.length() - 1; i >= 0; i--) {
int x = num1.charAt(i) - '0';
for (int j = num2.length() - 1; j >= 0; j--) {
int y = num2.charAt(j) - '0';
int temp = ret[i + j + 1] + x * y;
ret[i + j] += temp / 10;
ret[i + j + 1] = temp % 10;
}
}
StringBuilder stringBuilder = new StringBuilder();
//首位不为0
for (int i = ret[0] == 0 ? 1 : 0; i < ret.length; i++) {
stringBuilder.append(ret[i]);
}
System.out.println(stringBuilder.toString());
}
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
String[] strings=str.split(" ");
String a,b;
if(strings[0].length()<strings[1].length()){
a=strings[0];
b=strings[1];
}else {
a=strings[1];
b=strings[0];
}
String result="0";
int len=a.length()-1;
for(int i=len;i>=0;i--){
String add=Main.muti(b,a.charAt(i)-'0');
result=Main.add(result,add,len-i);
}
System.out.println(result);
}
public static String add(String a,String b,int offset){
int i=a.length()-1,j=b.length()-1;
StringBuilder stringBuilder=new StringBuilder();
while (offset>0){
stringBuilder.append(i>=0?a.charAt(i--)-'0':0);
offset--;
}
int m=0;//进位符;
while (i>=0&&j>=0){
int sum=(a.charAt(i)-'0')+(b.charAt(j)-'0');
stringBuilder.append((sum+m)%10);
m=(sum+m)/10;
i--;
j--;
}
while (m>0){
int temp;
if(i>=0){
temp=a.charAt(i--)-'0'+m;
}else if(j>=0){
temp=b.charAt(j--)-'0'+m;
}else {
temp=m;
}
stringBuilder.append(temp%10);
m=temp/10;
}
while (i>=0){
stringBuilder.append(a.charAt(i--));
}
while (j>=0){
stringBuilder.append(b.charAt(j--));
}
return stringBuilder.reverse().toString();
}
public static String muti(String a,int b){
StringBuilder stringBuilder=new StringBuilder();
int i=a.length()-1;
int m=0;//进位符;
while (i>=0){
int muti=(a.charAt(i)-'0')*b;
stringBuilder.append((muti+m)%10);
m=(muti+m)/10;
i--;
}
while (m!=0){
stringBuilder.append(m%10);
m/=10;
}
return stringBuilder.reverse().toString();
}
}