一元多项式的乘法与加法运算

    这个题目是在大神同学的帮助下完成的,刚开始的时候自己没有读懂题目的意思,后来在同学的讲解下我明白了意思(明白意思之后感觉自己好菜啊,自己也确实是菜鸟),哈哈。
    首先,定义了几个数组,分别用来存放输入的两个多项式的系数和指数、相加后的新的多项式的系数和指数、相乘后的新的多项式的系数和指数。然后,**用数组元素对应的下标值表示多项式的指数,数组元素的值表示其指数相对应的系数,这一点可以说是解题的关键**。然后通过循环等一系列操作就得到相乘后的多项式、相加后的多项式的系数和指数,用规定的格式输出便可。下面上代码:
#include<bits/stdc++.h>
using namespace std;
int x[1001],y[1001],z[1001],p[6000];
int main()
{
	int m,n,a,b;
	cin>>m;
	for(int i=0;i<m;i++)//输入第一个多项式的系数和指数 
	{
		cin>>a>>b; //其中a为系数,b为对应的指数 
		x[b]=a;//每个输入的指数都对应相应的输入的系数 
	}
	cin>>n;
	for(int i=0;i<n;i++)//输入第二个多项式的系数和指数 
	{
		cin>>a>>b;
		y[b]=a;
	}
	for(int i=0;i<=1000;i++)
	{
		z[i]=x[i]+y[i]; //指数相同的多项式执行加操作 
	}
	for(int i=0;i<=1000;i++)
	{
		if(x[i]!=0)//第一个多项式系数不为0时 
		{
			for(int j=0;j<=1000;j++)
			{
				if(y[j]!=0)// 第二个多项式系数不为0时 
				{
					p[i+j]+=x[i]*y[j];/*两个多项式相乘,其中可
					能出现指数相同的式子,所以最终输出
					的系数应是所有指数相同的式子的系数和*/ 
				}
			}
		}
		
	}
	int f=1;//定义开头输出标记
	int count=0;
	for(int i=2000;i>=0;i--)
	{
		if(p[i]!=0)//如果系数不为0
		{
			if(f)//开头标记 
			{
				cout<<p[i]<<" "<<i;
				f=0;//改变f的值,使继续执行输出 
			}
			else
			{
				cout<<" "<<p[i]<<" "<<i; 
			} 
			 count++; 
		 }
		
	 } 
	  if(count==0)//零多项式 
		 {
		 	cout<<"0 0";
		  } 
	 cout<<endl;//与输出加法的系数和指数换行
	 int f1=1;
	 int count1=0;
	 for(int i=1000;i>=0;i--)
	 {
	 	if(z[i]!=0)
	 	{
	 		if(f1)
	 		{
	 			cout<<z[i]<<" "<<i;
				f1=0;
			}
			else
			{
				cout<<" "<<z[i]<<" "<<i;
			}
			count1++;
		 }
		 
	  } 
	  if(count1==0)
		 {
		 	cout<<"0 0";
		 }
	return 0;
}

运行结果

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值