dongrunxuan @ 2024-01-06 15:03:25
rt,高精乘
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e3+10;
int a[maxn],b[maxn],c[maxn];
int operator * (string q,string w)
{
int la=q.size(),lb=w.size(),lc=la+lb;
for(int i=la-1;i>=0;i--)
{
a[la-1-i]=q[i]-'0';
}
for(int i=lb-1;i>=0;i--)
{
b[lb-1-i]=w[i]-'0';
}
for(int i=0;i<la;i++)
{
for(int j=1;j<lb;j++)
{
c[i+j]+=a[i]*b[j];
c[i+j+1]+=c[i+j]/10;
c[i+j]%=10;
}
}
while(lc&&c[lc]==0)
{
lc--;
}
return lc;
}
int main()
{
string q,w;
cin>>q>>w;
int lc=q*w;
for(int i=lc;i>=0;i--)
{
cout<<c[i];
}
return 0;
}
by dongrunxuan @ 2024-01-06 15:05:15
数组应开2e3……但还是没过
by M3te0rDream @ 2024-01-06 15:35:34
我的参考代码:
#include<bits/stdc++.h>
using namespace std;
const int N=2005;
int a[N],b[N],c[N*2];
string s,t;
int main(){
cin>>s>>t;
int lena=s.size(),lenb=t.size();
for(int i=0;i<lena;i++)a[lena-i]=s[i]-'0';
for(int i=0;i<lenb;i++)b[lenb-i]=t[i]-'0';
int lenc=lena+lenb;
for(int i=1;i<=lenb;i++)
for(int j=1;j<=lena;j++)
c[i+j-1]+=b[i]*a[j];
for(int i=1;i<=lenc;i++){
c[i+1]+=c[i]/10;
c[i]=c[i]%10;
}
while(lenc>1&&c[lenc]==0)lenc--;
for(int i=lenc;i>=1;i--)cout<<c[i];
return 0;
}
by wch666 @ 2024-01-06 19:35:06
@dongrunxuan 仅供参考
#include<bits/stdc++.h>
using namespace std;
char s1[2005],s2[2005];
int a[2005],b[2005],c[2*2005];
int main()
{
scanf("%s",s1);
scanf("%s",s2);
int lena=strlen(s1);
int lenb=strlen(s2);
int lenc=lena+lenb;
for(int i=0; i<lena; i++)
a[lena-i-1]=s1[i]-'0';
for(int i=0; i<lenb; i++)
b[lenb-i-1]=s2[i]-'0';
for(int i=0; i<lena; i++)
{
int x=0;
for(int j=0; j<lenb; j++)
{
c[i+j]=a[i]*b[j]+x+c[i+j];
x=c[i+j]/10;
c[i+j]%=10;
}
c[i+lenb]=x;
}
while(c[lenc] == 0 && lenc > 0)
lenc--;
for(int i=lenc; i>=0; i--)
cout<<c[i];
return 0;
}