问题描述:
计算两个一元多项式的乘积。
输入
每行两个多项式,以一个空格分隔,多项式格式为 (a_n x^n+ \ldots +a_1x+a_0)。
每行长度不超过(100),(0<n<50)。
输出
每组数据一行,根据次数由高到低顺序输出两个多项式乘积的非零项系数,两个系数之间由一个空格分隔。
样例
input
x+1 x-1 x^2-3x+1 x^3 x+2 2
output
1 -1 1 -3 1 2 4
代码
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
void readpo(char*s,int*co)
{
while(*s)
{
int sign=1,coef=0,dim=0;
if(*s=='+')s++;
else if(*s=='-') sign=-1,s++;
while(isdigit(*s))
{
coef=coef*10+*s-'0';
s++;
}
if(coef==0)coef=1;
if(*s!='x')
{
co[0]=coef*sign;return;
}
else s++;
if(*s=='^') s++;
while(isdigit(*s))
{
dim=dim*10+*s-'0';
s++;
}
if(dim==0) dim=1;
co[dim]=coef*sign;
}
}
void multiply(char* s1,char* s2,int* result)
{
int co1[50]={0},co2[50]={0};
readpo(s1,co1);
readpo(s2,co2);
for(int i=0;i<50;i++)
for(int j=0;j<50;j++)
result[i+j]+=co1[i]*co2[j];
}
int main()
{
char s1[101],s2[101];
while (scanf("%s %s",s1,s2)==2)
{ int result[100]={0};
multiply(s1,s2,result);
int flag=0;
for (int i=99;i>=0;i--)
{if (result[i])
{
flag?printf(" %d",result[i]):printf("%d",result[i]);
flag=1;
}
}
printf("\n");
}
return 0;
}