多项式加法
问题描述:
由文件输入两个多项式的各项系数和指数,试编程求出它们的和,并以手写的习惯输出此多项式。
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行以上的代码,更讨厌一切装逼的代码

浙公网安备 33010602011771号