Problem H: 高阶多项式(IV)

Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 764 Solved: 318
[Submit][Status]
Description
定义一个n阶多项式为:a0xn+a1xn-1+a2xn-2+…+an-2x2+an-1x+an。其中ai是系数,均为int类型内的整数。x是未知量,是一个double类型的实数。现在请定义Equation类来表示这个多项式。

1.重载的>>运算符,按照格式要求读取方程。

  1. 重载的<<运算符:用于输出方程。输出时xn输出x^n,且要按照我们平时惯用的方式来输出。包括如下规则:

(1)如果系数为0,则相应的项不输出。如果所有的系数为0,则只输出一个0。

(2)如果系数为1或-1,则不输出系数,仅输出对应的x的幂。

(3)一次项如果输出,不输出指数,即不输出x^1,而是x。

(4)0阶多项式即只有一个常数的多项式。

(5)按照从高阶到低阶的顺序输出。

(6)输出方程前,先按照样例格式输出各个方程的阶数。其中阶数定义为第一个非0系数对应的阶,如果只有常数项,则为0阶。

Input
输入有多行。

第一行N表示后面后N组测试用例。

每组测试用例包括2行。第1行n表示输入的系数的个数(不包括常数项),第2行输入n+1个int范围内的整数 ,是该多项式的系数,按照从高阶到低阶的顺序输入。

注意:每个测试用例的系数,可能前面若干个都是0,此时的阶数不等于n。

Output
见样例。

Sample Input
6
3
100 0 0 -1
3
100 -1 -1 -1
3
-1 -1 -1 -1
3
0 0 0 -1
3
0 -1 0 0
3
-100 0 0 -1
Sample Output
3 order polynomial:100x^3-1
3 order polynomial:100x3-x2-x-1
3 order polynomial:-x3-x2-x-1
0 order polynomial:-1
2 order polynomial:-x^2
3 order polynomial:-100x^3-1
HINT
Append Code
append.cc在这里插入代码片

int main()
{
    int n, i;
    cin>>n;
    for (i = 0; i < n; i++)
    {
        Equation eq;
        cin>>eq;
        cout<<eq;
    }
    return 0;
}

AC:

#include<iostream>
#include<iomanip>
#include<cstring>
using namespace std;
class Equation
{
public:
    int num;
    int flag;
    int *mems;
    friend istream& operator>>(istream &is,Equation &p)
    {
        is>>p.num;
        p.mems = new int[p.num+1];
        p.flag=0;
        int data;
        for(int i = 0;i<=p.num;i++)
        {
            is>>data;
            if(data!=0)
            {
               if(p.flag<(p.num-i))
                    p.flag =p.num - i;
            }
            p.mems[i]=data;
        }
        return is;
    }
    friend ostream& operator<<(ostream &os,Equation &p)
    {
        os<<p.flag<<" order polynomial:";
        for(int i = 0;i<=p.num;i++)
        {
          if(p.mems[i]!=0&&i!=p.num)
          {
              if((p.num-i)!=1)
              {
                  if(i==0)
                  {
                      if(p.mems[i]==1)
                     os<<"x^"<<p.num-i;
                      else if(p.mems[i]==-1)
                     os<<"-x^"<<p.num-i;
                      else
                     os<<p.mems[i]<<"x^"<<p.num-i;
                  }
                 else
                 {
                     if(p.mems[i]>0&&p.mems[i]!=1)
                        os<<'+'<<p.mems[i]<<"x^"<<p.num-i;
                     else if(p.mems[i]<0&&p.mems[i]!=-1)
                        os<<p.mems[i]<<"x^"<<p.num-i;
                     else if(p.mems[i]==1)
                        os<<'+'<<"x^"<<p.num-i;
                     else if(p.mems[i]==-1)
                        os<<'-'<<"x^"<<p.num-i;
                 }
              }
              else if((p.num-i)==1)
              {
                  if(p.mems[i]>0&&p.mems[i]!=1)
                    os<<'+'<<p.mems[i]<<"x";
                  else if(p.mems[i]<0&&p.mems[i]!=-1)
                    os<<p.mems[i]<<"x";
                   else if(p.mems[i]==1)
                    os<<"x";
                  else if(p.mems[i]==-1)
                    os<<"-x";
              }
          }
          else if(p.num==i&&p.mems[i]!=0)
          {
            if(p.mems[i]>0)
                os<<'+'<<p.mems[i];
            else
                 os<<p.mems[i];
          }
        }
        cout<<endl;
        return os;
    }
};
int main()
{
    int n, i;
    cin>>n;
    for (i = 0; i < n; i++)
    {
        Equation eq;
        cin>>eq;
        cout<<eq;
    }
    return 0;
}
/
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值