多项式加法

问题描述:

由文件输入两个多项式的各项系数和指数,试编程求出它们的和,并以手写的习惯输出此多项式。

1、多项式的每一项axb用axb的格式输出;

2、两个多项式在文件中各占一行,每行有2m个数,依次为第一项的系数,第一项的指数,第二项的系数,第二项的指数,……

3、系数按降幂方式排列,其中0<=指数<=100

 

输入:

文件名:Plus.In

两行:分别为两个多项式的每一项的系数和指数,格式如上所述。

 

输出:

文件名:Plus.out

相加后的多项式表达式

 

输入样例:

1 2 3 0

-1 1

输出样例:

x2-x+3    

 

解题思路:

看名字真的好厉害,读完题发现有点水,只要输入后来个桶排,把指数是i的加起来放在a【i】里,再处理一下输出就可以了。

代码如下:

#include<iostream>
#include<cstdlib>
#include<cstdio>
using namespace std;
int main()
{
freopen("plus.in","r",stdin);
freopen("plus.out","w",stdout);
char s[1001],ss[1001];
int n[101],a[100001];
memset(n,0,sizeof(n));
memset(a,0,sizeof(a));
gets(s);
gets(ss);
int j=1,k=2;
int i=0;
while(i<strlen(s))
{
if(s[i]=='-')
{
i++;
int x=s[i]-'0';
a[j]-=x;
j++;
}
else if(s[i]=='0')a[j]=0,j++;
else if(s[i]!=' ')
{
if(s[i+1]!=' ')
{
int x=s[i]-'0';
x*=10;
i++;
x+=s[i]-'0';
a[j]+=x;
i++;
}
else a[j]=s[i]-'0';
j++;
}
i++;
}
i=0;
while(i<strlen(ss))
{
if(ss[i]=='-')
{
i++;
int x=ss[i]-'0';
a[j]-=x;
j++;
}
else if(ss[i]=='0')a[j]=0,j++;
else if(ss[i]!=' ')
{
if(ss[i+1]!=' ')
{
int x=ss[i]-'0';
x*=10;
i++;
x+=ss[i]-'0';
a[j]+=x;
i++;
}
else a[j]=ss[i]-'0';
j++;
}
i++;
k=j;
}
for(int i=2;i<=k;i++)
if(i%2==0)n[a[i]]+=a[i-1];
int p=0;
for(int i=100;i>=0;i--)
if(n[i]!=0)
{
p++;
if(p!=1&&n[i]>0)cout<<"+";
if(n[i]==-1)cout<<"-";
else if(n[i]!=1)cout<<n[i];
if(i!=0)cout<<"x";
if(i>1)cout<<i;
if(i==0&&n[i]==1)cout<<1;
}
if(p==0)cout<<"0";
return 0;
}

//哈哈我讨厌一切50行以上的代码,更讨厌一切装逼的代码

 

posted @ 2016-02-19 14:40  fstcw  阅读(293)  评论(0)    收藏  举报