好久没写过这个模板了水一发,注意细节。
两个正整数相乘,(长度均小于10000),结果
代码:(这里还考虑了输入和输出的前导零)
#include<bits/stdc++.h>
using namespace std;
const int maxn=10005;
char X[maxn],Y[maxn],A[maxn],B[maxn];
char C[maxn*maxn];
int temp[maxn];
int main()
{
scanf("%s %s",A,B);
int la=strlen(A);
int lb=strlen(B);
int cnz=1;
int lz;
for(int i=lb-1;i>=0;i--)
{
int val=B[i]-'0';
int cnt=0;
int jw=0;
for(int j=la-1;j>=0;j--)
{
int nov=A[j]-'0';
int tz=val*nov+jw;
temp[cnt]=tz%10;
jw=tz/10;
if(i==lb-1)
{
C[cnt]=temp[cnt]+'0';
}
cnt++;
}
if(jw>0)
{
temp[cnt]=jw;
if(i==lb-1)
C[cnt]=temp[cnt]+'0';
cnt++;
}
if(i==lb-1)
{
lz=cnt;
continue;
}
int dw=0;
for(int j=0;j<cnt;j++)
{
int tw;
if(j+cnz>=lz)
tw=0;
else
tw=C[j+cnz]-'0';
int zw=tw+temp[j]+dw;
C[j+cnz]=zw%10+'0';
dw=zw/10;
}
lz=cnt+cnz;
cnz++;
}
int flag=0;
for(int i=lz-1;i>=0;i--)
{
if(C[i]=='0'&&flag==0&&i==0)
printf("%c",C[i]);
if(C[i]=='0'&&flag==0)
continue;
if(C[i]!='0') flag=1;
printf("%c",C[i]);
}
printf("\n");
return 0;
}