高精度乘法
输入:两行,每行表示一个非负整数(不超过10000位)
输出:两数的乘积。
样例1
样例输入1
99
101
样例输出1
9999
Java版:
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
BigInteger a = sc.nextBigInteger();
BigInteger b = sc.nextBigInteger();
System.out.println(a.multiply(b));
}
}
C++版:
#include<bits/stdc++.h>
using namespace std;
int main(){
char st1[10005],st2[10005];
int a[10005],b[10005],c[20005];
int i,j,len1,len2;
cin >> st1 >> st2;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
len1=strlen(st1);
len2=strlen(st2);
j=1;
for (i=len1-1;i>=0;i--){
a[j++]=st1[i]-'0';
}
j=1;
for (i=len2-1;i>=0;i--){
b[j++]=st2[i]-'0';
}
for(i=1;i<=len1;i++)
for (j=1;j<=len2;j++)
c[i+j-1]+=a[i]*b[j];
for(i=1;i<len1+len2;i++){
c[i+1]+=c[i]/10;
c[i]%=10;
}
while (!c[i] && i>1){
i--;
}
while (i){
printf("%d",c[i--]);
}
printf("\n");
return 0;
}