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;
    }
  • 相关阅读:
    Android系统启动:1-综述
    在高通Fastmmi模式中增强交互方式
    Ubuntu 18.04安装xdrp以使用远程桌面
    如何在Android 确定 lunch对应的内核配置
    Android ADB命令集锦
    Android日志系统(logging system)
    汉诺塔游戏
    设置静态ip
    navicat的下载、激活
    上传本地文件到github(码云)上(小乌龟方式,sourcetree方式)
  • 原文地址:https://www.cnblogs.com/wonderKK/p/2240389.html
Copyright © 2011-2022 走看看