设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:
输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。
输入样例:
4 3 4 -5 2 6 1 -2 0
3 5 20 -7 4 3 1
输出样例:
15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1
5 20 -4 4 -5 2 9 1 -2 0
序号 输入 输出
用例1输入:4 3 4 -5 2 6 1 -2 0
3 5 20 -7 4 3 1
用例1输出:15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1
5 20 -4 4 -5 2 9 1 -2 0
用例2输入:2 1 2 1 0
2 1 2 -1 0
用例2输出:1 4 -1 0
2 2
3
用例3输入:2 -1000 1000 1000 0
2 1000 1000 -1000 0
用例3输出:-1000000 2000 2000000 1000 -1000000 0
0 0
用例4输入0
1 999 1000
用例4输出0 0
999 1000
在这里插入代码片
**注意对数组大小定义不能过小。
#include "stdio.h"//零的多项式是指每个多项式的系数都为零。
#define N 10002
void assign(int p,int *q);//对一个一元多项式读取。
void rideAB(int *p,int *q);//对两个一元多项式求乘积并输出。
void sum(int *p,int *q);//对两个一元多项式求和并输出
int main()
{
int a,b,arrayA[N]={0},arrayB[N]={0};
scanf("%d",&a);
assign(a,arrayA);//读取第一个多项式。
scanf("%d",&b);
assign(b,arrayB);//读取第二个多项式。
rideAB(arrayA,arrayB);//求积输出。
printf("\n");
sum(arrayA,arrayB);//求和输出。
return 0;
}
void assign(int p,int *q)
{
int x,y;
for(int i=0;i<p;i++) {scanf("%d %d",&x,&y);q[y]=x;}
}
void sum(int *p,int *q)
{
int k=0;//k作为计数器控制输出时格式(空格)。
for(int i=N-1;i>=0;i--)
{
if(k&&(p[i]+q[i])) printf(" ");
if(p[i]+q[i]) {printf("%d %d",p[i]+q[i],i);k++;}
}
if(!k) printf("0 0");//求和结果为零多项式
}
void rideAB(int *p,int *q)
{
int arrayC[N]={0},k=0;
for(int i=0;i<N;i++)
for(int j=0;j<N;j++)
if(p[i]&&q[j]) arrayC[i+j]=arrayC[i+j]+p[i]*q[j];//将乘积存放arrayC中。
for(int i=N-1;i>=0;i--)//输出。
{
if(k&&arrayC[i]) printf(" ");
if(arrayC[i]) {printf("%d %d",arrayC[i],i);k++;}
}
if(!k) printf("0 0");
}
//参考李军老师提示及网上搜索的测试用例。
————————————————
版权声明:本文为CSDN博主「wss123wsj」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wss123wsj/article/details/79900625
————————————————
版权声明:本文为CSDN博主「wss123wsj」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wss123wsj/article/details/79900625