1
已解决
1
已采纳
@王欣怡
这!题!是!个!高!精!度!好!吗!
我用你的程序提交,成功WA爆0。(不信你自己试)
在此奉上正解:
1.函数
void Mul()
{
//c为目标数(乘积),a、b为乘数
memset(c,0,sizeof(c));
c[0]=a[0]+b[0]; //目标数位数不超过乘数位数之和
for(int i=1;i<=a[0];i++)
for(int j=1;j<=b[0];j++)
c[i+j-1]+=a[i]*b[j]; //做每一位的乘法
int upnum=0,sum;
for(int i=1;i<=c[0];i++)
{
sum=upnum+c[i]; //进位
upnum=sum/10;
c[i]=sum%10;
}
if(c[c[0]]==0) c[0]--; //去末尾0 memcpy(a,c,sizeof(c)); //多个乘数,把乘积赋给新乘数 }
2.读入、处理
cin>>n;
cin>>str;
a[0]=str.size();
for(int i=1;i<=a[0];i++) a[i]=str[a[0]-i]-48;
for(int i=1;i<=n-1;i++)
{
cin>>str;
b[0]=str.size();
for(int i=1;i<=b[0];i++) b[i]=str[b[0]-i]-48;
Mul();
}
0
0

