求两数的积。每个数字不超过 2000^500 ,需用高精。
这是一道高精度是乘法
我们在做高精度的题目的时候,需要用到竖式乘法,即模拟每一位的运算,类似我们的小学乘法,那么我们就可以写出这样的代码:
#include<bits/stdc++.h>
using namespace std;
string a,b;
int sa,sb,m,s1=0,s2=0,s3=0;
int a1[10000],b1[10000],c1[10000];
int main(){
cin>>a>>b;
sa=a.size();
sb=b.size();
for(int i=0;i<sa;i++){
a1[i]=a[sa-i-1]-48; //逆序导入两个字符串
}
for(int j=0;j<sb;j++){
b1[j]=b[sb-j-1]-48;
}
for(int i=0;i<sa;i++){
for(int j=0;j<sb;j++){
c1[i+j]+=a1[i]*b1[j]; //将每一位对应的两个数字乘起来
}
}
int len=sa+sb;
for(int i=0;i<len;i++){
if(c1[i]>9){
c1[i+1]+=c1[i]/10; //让他们的后一位加上前一位除掉10的商
c1[i]%=10; //当前位只留个位数
}
}
while(c1[len]==0&&len>0)len--; //不输出前面的0
for(int i=len;i>=0;i--){
cout<<c1[i];
}
// for(int i=0;i<sa;i++){
// cout<<a1[i];
// }
return 0;
}