A03 高精度算法 乘法_哔哩哔哩_bilibili
P1303 A*B Problem - 洛谷
// 高精度 O(n^2)
#include<bits/stdc++.h>
using namespace std;
void mul(string sa,string sb){
int la=sa.size(),lb=sb.size(),m=la+lb;
vector<int> a(m+1,0),b(m+1,0),c(m+1,0);
for(int i=0; i<la; i++) a[i]=sa[la-1-i]-'0';
for(int i=0; i<lb; i++) b[i]=sb[lb-1-i]-'0';
for(int i=0; i<la; i++)
for(int j=0; j<lb; j++){
c[i+j]+=a[i]*b[j];
c[i+j+1]+=c[i+j]/10;
c[i+j]%=10;
}
while(!c[m] && m) m--;
for(int i=m; ~i; i--) cout<<c[i];
}
int main(){
string a,b; cin>>a>>b;
mul(a,b);
return 0;
}
// 高精度 O(n^2)
#include<bits/stdc++.h>
using namespace std;
struct HP{
string s;
HP(string x="0"):s(x){}; //构造
const HP operator*(const HP &t){ //重载*
string sa=s,sb=t.s,res;
int la=sa.size(),lb=sb.size(),m=la+lb;
vector<int> a(m+1,0),b(m+1,0),c(m+1,0);
for(int i=0; i<la; i++) a[i]=sa[la-1-i]-'0';
for(int i=0; i<lb; i++) b[i]=sb[lb-1-i]-'0';
for(int i=0; i<la; i++)
for(int j=0; j<lb; j++){
c[i+j]+=a[i]*b[j];
c[i+j+1]+=c[i+j]/10;
c[i+j]%=10;
}
while(!c[m] && m) m--; //去除前导零
for(int i=m; i>=0; i--) res+=char(c[i]+'0');
return HP(res);
}
friend istream& operator>>(istream &in,HP &t){ //重载>>
in>>t.s;
return in;
}
friend ostream& operator<<(ostream &out,const HP &t){ //重载<<
out<<t.s;
return out;
}
};
int main(){
HP a,b; cin>>a>>b;
cout<<a*b;
return 0;
}