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;
    }
  • 相关阅读:
    MySQL 存储引擎 (一)
    mssql sqlserver if exists 用法大汇总
    mssql sqlserver 使用sql脚本实现相邻两条数据相减的方法分享
    mssql sqlserver 使用sql脚本获取字符串存在多少个网址(url地址)的方法分享
    mssql sqlserver sql脚本自动遍历重复生成指定表记录
    mssql sqlserver 使用sql脚本剔除数据中的tab、空格、回车等特殊字符的方法分享
    mssql sqlserver 使用SSMS运行sql脚本的六种方法分享
    mssql sqlserver isnull coalesce函数用法区别说明
    C# 当前 .NET SDK 不支持将 .NET Core 2.1 设置为目标。请将 .NET Core 2.0 或更低版本设置为目标,或使用支持 .NET Core 2.1 的 .NET SDK 版本。
    mssql sqlserver 三种数据表数据去重方法分享
  • 原文地址:https://www.cnblogs.com/wonderKK/p/2240389.html
Copyright © 2011-2022 走看看