Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
105376 | cy | 高精度乘法 | C++ | 通过 | 100 | 0 MS | 404 KB | 1416 | 2023-10-06 11:04:29 |
#include<bits/stdc++.h> using namespace std; typedef long long ll; struct bignum{ int x[5001]; int l; bignum(){ memset(x,0,sizeof(x)); l=1; } void read(){ string a; cin>>a; l=a.size(); for(int i=0;i<l;i++){ x[l-i]=a[i]-'0'; } return; } void print(){ for(int i=l;i>=1;i--){ cout<<x[i]; } return; } friend bignum operator+(bignum a,bignum b){ bignum c; c.l=max(a.l,b.l); for(int i=1;i<=c.l;i++){ c.x[i]=a.x[i]+b.x[i]; } return fix(c); } friend bignum operator-(bignum a,bignum b){ bignum c; c.l=max(a.l,b.l); for(int i=1;i<=c.l;i++){ c.x[i]=a.x[i]-b.x[i]; } return fix(c); } friend bignum operator*(bignum a,bignum b){ bignum c; c.l=a.l+b.l; for(int i=1;i<=a.l;i++){ for(int j=1;j<=b.l;j++){ c.x[i+j-1]+=a.x[i]*b.x[j]; } } return fix(c); } friend bignum fix(bignum a){ for(int i=1;i<a.l;i++){ while(a.x[i]<0){ a.x[i+1]--; a.x[i]+=10; } a.x[i+1]+=a.x[i]/10; a.x[i]%=10; } while(a.x[a.l]>9){ a.x[a.l+1]=a.x[a.l]/10; a.x[a.l]%=10; a.l++; } while(a.x[a.l]==0&&a.l>1){ a.l--; } if(a.x[a.l]<0){ cout<<'-'; bignum c; c.l=a.l; c.x[c.l]-=a.x[a.l]; a.x[a.l]=0; a.l--; a=c-a; } return a; } }; int main(){ bignum a,b; a.read(); b.read(); a=a*b; a.print(); return 0; }