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