问题标题: 酷町堂:2757 求n个数的乘积

1
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
王欣怡
王欣怡
新手光能
新手光能

很简单。输入的时候就计算乘积。

int n,a,s=1;//计算乘积必须赋为1
cin>>n;
for(int i=1;i<=n;i++)
{
    cin>>a;
    s*=a;
}
cout<<s;

会了吗??

 

采纳

我要回答