求两数的积。
输入格式 两行,两个整数。
输出格式 一行一个整数表示乘积。
输入输出样例
输入
1
2
输出
2
说明/提示 每个数字不超过 10^2000 ,需用高精。
#include<bits/stdc++.h>
using namespace std;
int a[8000];
int b[8000];
int c[8000];
void stringtoarray(string s,int a[]){ //字符串转数字,存入数组
for(int i=0;i<s.size();i++){
a[i]=s[i]-'0';
}
}
int fun(int n,int m){
memset(c,0,sizeof(c));
int a1=n-1,a2=m-1; //模拟竖式乘法,n*m位数最多不超过n+m-1位,倒序相乘再相加,结果存入数组c
for(int i=a1;i>=0;i--){
for(int j=a2;j>=0;j--){
c[i+j+1]+=a[i]*b[j];
if(c[i+j+1]>=10){
c[i+j]+=(c[i+j+1]/10); //每次累加都判断进位
c[i+j+1]=c[i+j+1]%10;
}
}
}
return n+m; //返回n+m,为了告诉display函数读到多少位截止
}
void display(int k){
int flag=0;
for(int i=0;i<k;i++){
if(c[i]!=0){ //由于无法判断有几位数,读到不是0的数起再开始输出
flag=1;
}
if(flag==1){
cout<<c[i];
}
}
if(flag==0){ //如果所有都是0,直接输出0
cout<<"0";
}
}
int main(){
string s1,s2,s3;
cin>>s1>>s2;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
stringtoarray(s1,a);
stringtoarray(s2,b);
int k;
k=fun(s1.size(),s2.size());
display(k);
//system("pause");
return 0;
}