7-22 一元多项式的乘法与加法运算 (20 分)
设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分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
//
#include <stdio.h>
#include <stdlib.h>
#define N 10000
int main()
{
int a[N] = {0};
int b[N] = {0};
int c[N] = {0}; //求积
int d[N] = {0}; //求和
int i,j;
int x,z ; //系数 指数
int cnt=0;
scanf(\"%d\",&i); //读入第一个单项式
while( i-- )
{
scanf(\"%d %d\",&x,&z);
a[z] += x; //指数为z的系数放在z位置上
}
scanf(\"%d\",&i); //读入第二个单项式
while( i-- )
{
scanf(\"%d %d\",&x,&z);
b[z] += x;
}
//多项式乘法
for( i=N-1; i>=0; i--)
{
if( a[i] )
{
for( j=0; j<N; j++)
if( b[j])
c[ i+j ] += a[i]*b[j];
}
}
//输出多项式乘法结果
for( i=N-1; i>=0; i--)
{
if( c[i] )
{
if( cnt )
{
//处理结尾不能有多余空格
printf(\" \");
}
printf(\"%d %d\",c[i],i);
cnt++;
}
}
if( !cnt )
printf(\"0 0\");
printf(\"\\n\");
//多项式加法
for( i=N-1; i>=0; i--)
{
if( a[i])
d[i] += a[i];
}
for( j=N-1; j>=0; j--)
{
if( b[j])
d[j] += b[j];
}
//输出多项式加法结果
cnt = 0;
for( i=N-1; i>=0; i--)
{
if( d[i] )
{
if( cnt )
{
printf(\" \");
}
printf(\"%d %d\",d[i],i);
cnt++;
}
}
if(!cnt)
printf(\"0 0\");
return 0;
}
继续阅读与本文标签相同的文章
上一篇 :
忍无可忍,notepad+又作妖了
下一篇 :
iPhone销量下降,库克却信心满满
-
觉非科技:专注于提供自动驾驶决策地图与服务
2026-05-18栏目: 教程
-
五大常用算法:回溯法
2026-05-18栏目: 教程
-
家电运输物流管理信息软件
2026-05-18栏目: 教程
-
Windows 10累积更新导致经典版Edge无法打开 微软承诺月底前修复
2026-05-18栏目: 教程
-
云南移动与昆船集团5G项目又有新进展,亮相瑞士第十届全球移动宽带论坛
2026-05-18栏目: 教程
