uua___ @ 2024-05-15 17:15:52
#include<bits/stdc++.h>
using namespace std;
int a[1000000],b[1000000],c[1000000];
string x,y;
int la,lb,lc;
int main()
{
cin>>x>>y;
la=x.size();
lb=y.size();
for(int i=0;i<la;i++)
{
a[la-i]=x[i]-'0';
}
for(int i=0;i<lb;i++)
{
b[lb-i]=y[i]-'0';
}
// lc=max(la,lb);
for(int i=1;i<=la;i++)
{
for(int j=1;j<=lb;j++)
{
c[i+j-1]+=a[j]*b[i];
}
}
for(int i=1;i<=lb+la;i++)
{
if(c[i]>9)
{
c[i+1]=c[i]/10;
c[i]=c[i]%10;
}
}
int lc=la+lb;
while(c[lc]==0&&lc>1) lc--;
// if(c[la+lb+1]>0) lc++;
for(int i=lc;i>=1;i--)
{
cout<<c[i];
}
return 0;
}
by biantwin @ 2024-05-15 17:37:48
你转换的时候是存的数组第零位,而相乘的时候是从数组的第一位开始乘的,将前两个for循环改一下,或者改一下第三个for循环就行了
by shengzhaoteng1118 @ 2024-06-05 17:32:05
#include<bits/stdc++.h>
using namespace std;
int a[10001],b[10001],c[10001],la,lb,lc;char s[10001];bool d,d2;
int main(){
scanf("%s",s);
d=s[0]=='-';
for(la=1;la<=strlen(s)-d;la++){
a[la]=s[strlen(s)-la]-'0';
}
scanf("%s",s);
d2=s[0]=='-';
for(lb=1;lb<=strlen(s)-d2;lb++){
b[lb]=s[strlen(s)-lb]-'0';
}
if((d||d2)&&(!(d&&d2))){
cout<<'-';
}
lc=la+lb+1;
for(int i=1;i<=la;i++){
for(int j=1;j<=lb;j++){
c[i+j-1]+=a[i]*b[j];
c[i+j]+=c[i+j-1]/10;
c[i+j-1]%=10;
}
}
while(c[lc]==0&&lc>1){
lc--;
}
for(int i=lc;i>=1;i--){
cout<<c[i];
}
return 0;
}