Myosotis_alpestris @ 2022-04-03 10:56:19
RT,感觉写的很怪
开O2之后最后两个点不是TIE而是RE
而且第一个点也会WA
可能是因为第一个点用的特判
蹲一个大佬帮调
#include<bits/stdc++.h>
using namespace std;
int main()
{
string a,b;
int c1[100],c2[100],c3[100]={0};
int len1,len2,lenc;
cin>>a>>b;
len1=a.length();
len2=b.length();
if((len1==1&&c1[0]==0)||(len2==1&c2[0]==0))//因为会产生大量的前导0,所以当单个乘数是0的时候须特判
{
cout<<"0"<<endl;
return 0;
}
if (len1<len2)//补0,如果没有这一项第五个点会RE
{
for(int i=1;i<=len2-len1;i++)
{
a="0"+a;
}
}
else
{
for(int i=1;i<=len1-len2;i++)
{
b="0"+b;
}
}
len1=a.length();
len2=b.length();
for(int x=0;x<=len1-1;x++)//将字符串转为数组
{
c1[len1-x]=a[x]-'0';
}
for(int y=0;y<=len2-1;y++)
{
c2[len2-y]=b[y]-'0';
}
int qaq=1;
int awa=2;
for(int i=1;i<=len2;i++)
{
for (int j=1;j<=len2;j++)
{
int x=c1[j]*c2[i];
if(c3[qaq]==0)//如果这一位是0,那它的位数+1
{
lenc++;
}
c3[qaq]+=x;
if(c3[qaq]>=10)//将>=10的部分移到上一位
{
if(c3[qaq+1]==0)
{
lenc++;
}
c3[qaq+1]+=c3[qaq]/10;
c3[qaq]%=10;
}
qaq++;
}
qaq=awa;//awa代表前移的位数
awa++;
}
while(c3[lenc]==0)//去掉多余的前导0
{
lenc--;
}
for (int i=lenc;i>0;i--)
{
cout<<c3[i];
}
}
by zyq1234 @ 2022-04-21 10:24:46
我也是这个问题,我把 int c1[100],c2[100],c3[100]={0}; 数组改大了,改成了5010。就成功了!