zoukankan      html  css  js  c++  java
  • c++用类实现一元多项式加减乘

    接口文件poly.h

    #ifndef POLY_H
    #define POLY_H
    #include <iostream>
    #include <cstdlib>
    #include <cstddef>
    using namespace std;
    typedef int* intptr;
    class poly
    {
    public:
    poly();
    poly(int a);
    poly(const poly& p);
    ~poly();
    void creat();
    friend poly operator +(const poly& p1,const poly& p2);
    friend poly operator -(const poly& p1,const poly& p2);
    friend poly operator *(const poly& p1,const poly& p2);
    poly& operator =(const poly& p);
    friend ostream& operator <<(ostream& outs,const poly& p);
    private:
    intptr polyomial;
    int len;
    };
    #endif

    多项式类的实现poly.cpp

    #include <iostream>
    #include "poly.h"
    #include <vector>
    using namespace std;


    poly::poly()
    { polyomial=NULL;
    len=0;
    }

    poly::poly(int a)
    {len=1;
    polyomial=new int[1];
    polyomial[0]=a;
    }


    poly::poly(const poly& p)
    { len=p.len;
    polyomial=new int[len];
    for(int i=0;i<len;i++)
    polyomial[i]=p.polyomial[i];

    }


    poly::~poly()
    {
    delete [] polyomial;
    }



    void poly::creat()
    { vector <int> v1,v2;
    int c1,c2;
    cin>>c1>>c2;
    while(c1!=0)
    {
    v1.push_back(c1);
    v2.push_back(c2);
    cin>>c1>>c2;
    }

    int max=v2[0];
    for(int i=1;i<v2.size();i++)
    if(max<v2[i])max=v2[i];


    //int max=v2[v2.size()-1];

    polyomial=new int[max+1];
    len=max+1;
    for(int z=0;z<max+1;z++)
    polyomial[z]=0;
    for(int i=0;i<max+1;i++)
    {
    for(int j=0;j<v1.size();j++)
    {if(i==v2[j])polyomial[i]=v1[j];

    }
    }

    }

    poly operator +(const poly& p1,const poly& p2)
    { poly a;
    if(p1.len>p2.len)
    { a.polyomial=new int[p1.len];
    for(int i=0;i<p2.len;i++)
    a.polyomial[i]=p1.polyomial[i]+p2.polyomial[i];
    for(int i=p2.len;i<p1.len;i++)
    a.polyomial[i]=p1.polyomial[i];
    a.len=p1.len;
    }
    else
    { a.polyomial=new int[p2.len];
    for(int i=0;i<p1.len;i++)
    a.polyomial[i]=p1.polyomial[i]+p2.polyomial[i];
    for(int i=p1.len;i<p2.len;i++)
    a.polyomial[i]=p1.polyomial[i];
    a.len=p2.len;
    }
    return a;
    }

    poly operator -(const poly& p1,const poly& p2)
    { poly a;
    if(p1.len>p2.len)
    { a.polyomial=new int[p1.len];
    for(int i=0;i<p2.len;i++)
    a.polyomial[i]=p1.polyomial[i]-p2.polyomial[i];
    for(int i=p2.len;i<p1.len;i++)
    a.polyomial[i]=p1.polyomial[i];
    a.len=p1.len;
    }
    else if(p1.len<p2.len)
    { a.polyomial=new int[p2.len];
    for(int i=0;i<p1.len;i++)
    a.polyomial[i]=p1.polyomial[i]-p2.polyomial[i];
    for(int i=p1.len;i<p2.len;i++)
    a.polyomial[i]=-p2.polyomial[i];
    a.len=p2.len;
    }
    else
    {
    a.polyomial=new int[p1.len];
    for(int i=0;i<p1.len;i++)
    a.polyomial[i]=p1.polyomial[i]-p2.polyomial[i];
    a.len=p1.len;
    }
    return a;
    }

    poly operator *(const poly& p1,const poly& p2)
    {
    poly a;

    a.polyomial=new int[p1.len+p2.len-1];

    a.len=p1.len+p2.len-1;
    for(int i=0;i<a.len;i++)
    a.polyomial[i]=0;
    for(int i=0;i<p2.len;i++)
    {
    for(int j=0;j<p1.len;j++)
    {
    if(0==i){ a.polyomial[i+j]=p2.polyomial[i]*p1.polyomial[j];}
    else { a.polyomial[i+j]=a.polyomial[i+j]+p2.polyomial[i]*p1.polyomial[j];}
    }
    }
    return a;
    }


    poly& poly:: operator =(const poly& p)
    { len=p.len;
    polyomial=new int[len];
    for(int i=0;i<len;i++)
    polyomial[i]=p.polyomial[i];
    return (*this);
    }



    ostream& operator <<(ostream& outs,const poly& p)
    {int n=0;
    for(int i=0;i<p.len;i++)
    if(p.polyomial[i]!=0)
    { n++;
    if(1==n)
    {
    if(0==i)outs<<p.polyomial[0];
    else outs<<p.polyomial[i]<<"x^"<<i;
    }
    else
    {

    if(0==i)outs<<p.polyomial[0];
    else if(p.polyomial[i]>0)outs<<"+"<<p.polyomial[i]<<"x^"<<i;
    else outs<<p.polyomial[i]<<"x^"<<i;
    }
    }
    return outs;
    }
  • 相关阅读:
    NB-IOT终端应用场景
    开关量是什么信号,模拟量是什么信号
    模拟量设备为什么都用4~20mA传输信号
    物联网三大关键技术
    4~20mA.DC(1~5 V.DC)信号制的优点
    Lora在局域网中的优势
    NB-IoT终端在不同工作状态下的分析
    4G模块的串行AT命令发送未接收返回如何处理
    前端性能优化
    Tab:不可思议的CSS光标下划线跟随效果
  • 原文地址:https://www.cnblogs.com/wonderKK/p/2240389.html
Copyright © 2011-2022 走看看