Greeper @ 2024-09-22 14:42:05
rt
#include<bits/stdc++.h>
using namespace std;
int a[2050],b[2050],c[4100],la,lb;
string sa,sb;
int mine(int* a,int* b,int *c,int la,int lb)
{
int lc=la+lb;
for(int i=0;i<=la;i++)
for(int j=0;j<lb;j++)
c[i+j]=a[i]*b[j];
for(int i=0;i<lc;i++)
{
c[i+1]+=c[i]/10;
c[i]%=10;
if(i==lc-1)
{
if(c[i+1])
{
lc++;
}
}
}
int i=lc-1;
while(!c[i])
{
lc--;
i--;
}
return lc;
}
int main()
{
cin>>sa>>sb;
la=sa.size(),lb=sb.size();
for(int i=la-1;i>=0;i--)
{
a[la-i-1]=sa[i]-'0';
}
for(int i=lb-1;i>=0;i--)
{
b[lb-i-1]=sb[i]-'0';
}
int lc=mine(a,b,c,la,lb);
for(int i=lc-1;i>=0;i--)
{
cout<<c[i];
}
return 0;
}
by xiexiuqi29 @ 2024-09-22 15:12:59
@Greeper
#include<bits/stdc++.h>
using namespace std;
int a[2050],b[2050],c[4100],la,lb;
string sa,sb;
int mine(int* a,int* b,int *c,int la,int lb)
{
int lc=la+lb;
int ld=max(la,lb);
for(int i=0;i<=ld;i++)
for(int j=0;j<ld;j++)
c[i+j]=c[i+j]+a[i]*b[j];//应该加上原来的结果
for(int i=0;i<lc;i++)
{
c[i+1]+=c[i]/10;
c[i]%=10;
if(i==lc-1)
{
if(c[i+1])
{
lc++;
}
}
}
int i=lc-1;
while(!c[i])
{
lc--;
i--;
}
return lc;
}
int main()
{
cin>>sa>>sb;
la=sa.size(),lb=sb.size();
for(int i=la-1;i>=0;i--)
{
a[la-i-1]=sa[i]-'0';
}
for(int i=lb-1;i>=0;i--)
{
b[lb-i-1]=sb[i]-'0';
}
int lc=mine(a,b,c,la,lb);
if(sa=="0"||sb=="0")
cout<<0;//因数为零特判
for(int i=lc-1;i>=0;i--)
{
cout<<c[i];
}
return 0;
}