ALexanse @ 2022-09-15 20:33:47
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int main()
{
char a[4020]={0},b[4020]={0};
int p[4020]={0},q[4020]={0},w[6000]={0};
cin>>a>>b;
long long m=strlen(a);
long long n=strlen(b);
long long t=m+n;
for(long long i=0;i<m;i++)
{
p[m-i]=a[i]-'0';
}
for(long long i=0;i<n;i++)
{
q[n-i]=b[i]-'0';
}
for(long long i=1;i<=m;i++)
{
for(long long j=1;j<=n;j++)
{
w[i+j-1]+=p[i]*q[j];
}
}
for(long long k=1; k<=t; k++)
{
if(w[k]>9)
{
w[k+1]+=w[k]/10;
w[k]=w[k]%10;
}
}
while(t>0&&w[t]==0) t--;
for(long long k=t;k>=1;k--)
printf("%d",w[k]);
return 0;
}
by iiiiiyang @ 2022-09-15 20:34:42
@ALexanse 进位应该放在循环里头吧
by ALexanse @ 2022-09-15 20:56:26
@forqprever 其实我刚刚AC了,问题其实出在没考虑结果为0的情况```cpp
using namespace std; int main() { char a[20001]={0},b[20001]={0}; int p[20001]={0},q[20001]={0},w[40005]={0}; cin>>a>>b; long long m=strlen(a); long long n=strlen(b); long long t=m+n; for(long long i=0;i<m;i++) { p[m-i]=a[i]-'0'; } for(long long i=0;i<n;i++) { q[n-i]=b[i]-'0';
}
for(long long i=1;i<=m;i++)
{
for(long long j=1;j<=n;j++)
{
w[i+j-1]+=p[i]*q[j];
}
}
for(long long k=1; k<=t; k++)
{
if(w[k]>9)
{
w[k+1]+=w[k]/10;
w[k]=w[k]%10;
}
}
while(t>0&&w[t]==0) t--;//此处乘法与加法的不同之处在于加法最多进位一位,而乘法不然 if(t==0) { printf("0"); return 0; } for(long long k=t;k>=1;k--) printf("%d",w[k]); return 0; }
by ALexanse @ 2022-09-15 20:56:59
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int main()
{
char a[20001]={0},b[20001]={0};
int p[20001]={0},q[20001]={0},w[40005]={0};
cin>>a>>b;
long long m=strlen(a);
long long n=strlen(b);
long long t=m+n;
for(long long i=0;i<m;i++)
{
p[m-i]=a[i]-'0';
}
for(long long i=0;i<n;i++)
{
q[n-i]=b[i]-'0';
}
for(long long i=1;i<=m;i++)
{
for(long long j=1;j<=n;j++)
{
w[i+j-1]+=p[i]*q[j];
}
}
for(long long k=1; k<=t; k++)
{
if(w[k]>9)
{
w[k+1]+=w[k]/10;
w[k]=w[k]%10;
}
}
while(t>0&&w[t]==0) t--;//此处乘法与加法的不同之处在于加法最多进位一位,而乘法不然
if(t==0)
{
printf("0");
return 0;
}
for(long long k=t;k>=1;k--)
printf("%d",w[k]);
return 0;
}