原题地址连接:http://acm.jlu.edu.cn/joj/showproblem.php?pid=1013
多项式相乘算法很简单,但是输出要求很苛刻,比如空白,换行等
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#define N 20
int result[3*N];
int left[N];
int right[N];
int main(int argc, char *argv[])
{
int n,a,b,c,i,j;
scanf("%d",&n);
while(n>0)
{
memset(result,0,sizeof(result));
scanf("%d",&a);
i = a;
while(i>=0)
{
scanf("%d",&left[i]);
i--;
}
scanf("%d",&b);
j = b;
while(j>=0)
{
scanf("%d",&right[j]);
j--;
}
for(i=0;i<=a;i++)
for(j=0;j<=b;j++)
result[i+j] += left[i] * right[j];
int iszero = 1;
c = a+ b;
for(i=c;i>=0;i--)
{
if(result[i] != 0)
{
iszero = 0;
break;
}
}
if(iszero)
{
printf("0/n");
}
else
{
int flag = 0;
for(i=c;i>=0;i--)
{
if(result[i] != 0)
{
if(result[i] != 1)
{
if(flag)
printf(" + ");
if(i>=2)
printf("%dx^%d",result[i],i);
else if(i == 1)
printf("%dx",result[i]);
else if(i == 0)
printf("%d",result[i]);
}
else
{
if(flag)
printf(" + ");
if(i>=2)
printf("x^%d",i);
else if(i == 1)
printf("x");
else if(i == 0)
printf("%d",result[i]);
}
}
flag = 1;
}
printf("/n");
}
n--;
}
system("PAUSE");
return 0;
}