注意点: 1.两个数相乘的时候,要用long long 防止溢出 2.最后输出的时候,位数不够前面补0,用的是 %.9d 反正阔以这样用(っ•̀ω•́)っ✎⁾⁾ 我爱学习
#include"iostream" #include"algorithm" #include"string.h" using namespace std; const int maxn=2e5+5; const int MOD=1e9; typedef long long LL; struct Big { int n; int a[maxn]; }; Big c2n(char *s) { int len=strlen(s); Big t; t.n=len/9; memset(t.a,0,sizeof(t.a)); int tp; for(int i=0,j=len-1;i<len;i++,j--) { if(i%9==0)tp=1; t.a[i/9]+=(s[j]-'0')*tp; tp*=10; }; return t; } Big operator*(Big a,Big b) { Big res; res.n=a.n+b.n+2; memset(res.a,0,sizeof(res)); for(int i=0;i<=a.n;i++) for(int j=0;j<=b.n;j++) { LL tp=(LL)a.a[i]*b.a[j]; tp+=res.a[i+j]; res.a[i+j+1]+=tp/MOD; res.a[i+j]=tp%MOD; } while(res.a[res.n]==0)res.n--; return res; } void print(Big res) { cout<<res.a[res.n]; for(int i=res.n-1;i>=0;i--)printf("%.9d",res.a[i]); cout<<"\n"; } int main() { char a[maxn],b[maxn]; while(cin>>a>>b) { Big aa=c2n(a),bb=c2n(b); Big res=aa*bb; print(res); } }