PAT:1002. A+B for Polynomials (25) 部分错误
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//【warning】double 输入%lf,输出%f
struct arr
{
int tag;
double data;
}arr[1005];
int main()
{
memset(arr,0,sizeof(arr));
int t1,t2,tmp,maxI=0; //maxI记录最多多少项
double tdata;
for(int I=0 ; I<2 ; ++I) //输入第一个和第二个多项式
{
scanf("%d",&t1); //多项式有t1项
/* if(t1>maxI)
maxI=t1;*/
for(int i=0 ; i<t1 ; ++i) //输入多项式
{
scanf("%d",&tmp);
arr[tmp].tag=1; //修改过,设置为有效
scanf("%lf",&tdata);
arr[tmp].data+=tdata; //加上这项前系数
if(arr[tmp].data==0) //正负抵消,没有此项了,设为无效
arr[tmp].tag=0;
}
}
int len=0; //len记录多项式项数
for(int i=0 ; i<=1000 ; ++i)
if(arr[i].tag==1)
++len;
printf("%d",len);
if(len!=0)
{
int cnt=0; //【caution】记录输出个数,控制空格数量,不一定是输出到指数为0才结束
printf(" ");
for(int i=1000 ; i>=0 ; --i) //从后向前找tag为1的有效项
if(arr[i].tag==1)
{
printf("%d %.1f",i,arr[i].data);
++cnt;
if(cnt!=len)
printf(" "); //保证只有中间有空格
}
}
printf("\n");
//system("pause");
return 0;
}