鲍老师的班 @ 2017-09-25 19:46:47
#include<iostream>
using namespace std;
int La,Lb,Lc;
int a[256],b[256],c[102],d[512];
//两个数的乘积不超过:La+Lb
string s1,s2;
void read()
{
int i,j;
cin>>s1>>s2;
La=s1.length();
Lb=s2.length();
//倒序放在整型数组中 s1="5678" La=4
// a[1]=8=s1[La-1=3] a[2]=7=s1[2]
//a[3]=6=s1[1]; a[4 La]=5=s1[0]
for(i=1;i<=La;i++)
a[i]=s1[La-i]-'0';
for(i=1;i<=Lb;i++)
b[i]=s2[Lb-i]-'0';
if(La<Lb) //确保a大
{
swap(a,b);//可以交换两个数组
swap(La,Lb);
}
}
void chen()
{ int i,j,w,x;
//a[1]依次去b的每一位
for(i=1;i<=La;i++)
for(j=1;j<=Lb;j++)
{
w=i+j-1;//定位,La=1开始
x=a[i]*b[j];//乘积的结果 7*8=56
d[w]=d[w]+x%10;//本位对于已有的值加乘积的个数数
d[w+1]=d[w+1]+x/10+d[w]/10;
//(乘积的进位)下一位等于已有的值
//+低位乘积X的十位数+c[w]的十位数
d[w]=d[w]%10;
//c[w]为进位后剩下的在w位应得的数字
}
//乘法有可能 la+lb的长度
for(i=La+Lb;i>1;i--)
{
if(d[i]!=0)
break;
}
//如果全是0,至少输出个位的0
for(i;i>=1;i--)
cout<<d[i];
}
int main()
{ read();
chen();
return 0;
}
by 鲍老师的班 @ 2017-09-25 19:47:20
最后俩点RE,什么错误
by 鲍老师的班 @ 2017-09-25 19:48:17
求教
by damage @ 2017-09-27 21:26:17
数组太小了,至少2000+2000=4000,建议数组开5000
by zsc2003 @ 2017-10-04 20:31:32
RE是runtime errow,就是运行时错误。很有可能是你的数组开小了,应该开到10000以上就没有问题了。
如我开的数组是 a[10010];
就没有出现RE。
希望有帮助。