Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
105389 刘殷恺 高精度乘法 C++ 通过 100 0 MS 264 KB 1164 2023-10-06 11:10:07

Tests(30/30):


#include<bits/stdc++.h> using namespace std; const int maxn=5010; int a[maxn],b[maxn],c[maxn],al,bl,cl; string sa,sb; bool f; inline void add() { cl=max(al,bl); for(int i=1;i<=cl;++i) { c[i]=c[i]+b[i]+a[i]; if(c[i]>=10) c[i+1]=1, c[i]-=10; } while(cl>1 && c[cl]==0) cl-=1; if(c[cl+1]>0) cl+=1; } inline void miu(bool f) { if((al<bl) || (al==bl && a[al]<b[al])) { for(int i=1;i<=bl;++i) swap(a[i],b[i]); swap(al,bl); f=1; } cl=al; for(int i=1;i<=al;++i) { c[i]=a[i]-b[i]; if(c[i]<0) a[i+1]-=1, c[i]+=10; } while(cl>1 && c[cl]==0) cl-=1; if(f) c[cl]=-c[cl]; } inline void mul() { for(int i=1;i<=al;++i) { int x=0; for(int j=1;j<=bl;++j) c[i+j-1]=a[i]*b[j]+x+c[i+j-1], x=c[i+j-1]/10, c[i+j-1]%=10; c[i+bl]=x; } cl=al+bl; while(cl>1 && c[cl]==0) cl-=1; if(c[cl+1]>0) cl+=1; } int main() { getline(cin,sa); al=sa.size(); getline(cin,sb); bl=sb.size(); for(int i=0;i<al;++i) a[i+1]=sa[al-i-1]-'0'; for(int i=0;i<bl;++i) b[i+1]=sb[bl-i-1]-'0'; // add(); // miu(); mul(); for(int i=cl;i>=1;--i) cout<<c[i]; return 0; }


测评信息: