将问题分为四步1输入多项式 2解析多项式中的系数和指数 3计算多项式乘法 4输出乘积的系数
#include <stdio.h>
#define N 100
void readpoly(char *p, int* co)
{
while (*p)
{
int sign=1,c=0,d=0;//表示系数正负,系数绝对值,次数
if (*p=='+' ) p++;
else if (*p=='-') sign=-1,p++;
while (isdigit(*p)) { c=c*10+*p-'0'; p++; }
if (*p!='x') { co[0]=c*sign; return; } else p++;//没有x说明为常数项,结束读取
if (c==0) c=1;//x前没读取到数字,说明系数为1
if (*p=='^') p++;
while (isdigit(*p)) { d=d*10+*p-'0'; p++; }
if (d==0) d=1;//x后没读取到数字,说明次数为1
co[d]=c*sign;
}
}
void multiply(char *s1,char *s2, int* co)
{
int co1[N]={0},co2[N]={0},i,j;
readpoly(s1,co1); readpoly(s2,co2);
for (i=0;i<N/2;i++)
for (j=0;j<N/2;j++)
co[i+j]+=co1[i]*co2[j];
}
int main()
{
char s1[N+1],s2[N+1];
while(scanf("%s%s",s1,s2)==2)
{
int co[N]={0},out[N],n=0,i;
multiply(s1,s2,co);
for (i=0;i<N;i++) if (co[i]) out[n++]=co[i];
for (i=n-1;i>=0;i--)
{
printf("%d",out[i]);
if (i>0) printf(" "); else printf("\n");
}
}
return 0;
}
read函数根据逻辑将一个多项式的信息写入co数组中,co数组的第i项表示x的i次幂,里面的数是对应项系数。然后multilpy函数将s1s2分别写入co1co2然后相乘得到co数组,最后在主函数中按要求输出即可