注释部分是另一种输出一位小数的设置,很明显用printf("%.1f",x)就够了。
另外,一开始系数结果用Arr3[1001]记录,显示段错误,实质是数组越界。改成Arr3[2001]就好。
#include<iostream>
//#include<iomanip>
using namespace std;
typedef struct poly
{
int e;//指数
float c;//系数
}poly;
int main()
{
int K1,K2,i,j,tempe,count=0;
float tempc;
cin>>K1;
//cout.setf(ios::fixed);
poly *Arr1=new poly[K1];
for(i=0;i<K1;i++)
{
cin>>Arr1[i].e;
cin>>Arr1[i].c;
}
cin>>K2;
poly *Arr2=new poly[K2];
for(i=0;i<K2;i++)
{
cin>>Arr2[i].e;
cin>>Arr2[i].c;
}
float Arr3[2001]={0};
for(i=0;i<K1;i++)
{
for(j=0;j<K2;j++)
{
tempe=Arr1[i].e+Arr2[j].e;
tempc=Arr1[i].c*Arr2[j].c;
Arr3[tempe]=Arr3[tempe]+tempc;
}
}
for(i=2000;i>=0;i--)
{
if(Arr3[i]!=0) count++;
}
//if(count==0) {cout<<count;return 0;}
cout<<count<<" ";
for(i=2000;i>=0;i--)
{
if(Arr3[i]!=0)
{
//cout<<i<<" "<<setprecision(1)<<Arr3[i];
printf("%d %.1f",i,Arr3[i]);
count--;
if(count) cout<<" ";
}
}
return 0;
}