稀疏多项式的实现

 

#include "stdafx.h"
#include 
<iostream>
#include
<list>
#include
<assert.h>
using namespace std;

class Term{ //代表多项式中的每一项
    friend ostream& operator<<(ostream&, Term&);
    friend istream
& operator>>(istream&, Term&);
    friend 
class Polynominal;
public:
    Term(
int c,int e) : coef(c), exp(e){}
    Term
& operator+(Term&);
private:
    
int coef;
    
int exp;
};

ostream
& operator<<(ostream& out, Term& t){//输出单项
    if(t.coef==0return out;
    
else if(t.coef>0out<<"+";
    
out<<t.coef<<"x^"<<t.exp;
    
return out;
}

istream
& operator>>(istream& in, Term& t){//输入单项,包括指数和系数
    cout<<"Input coef & exp: "<<endl;
    
in>>t.coef>>t.exp;
    
return in;
}

Term
& Term::operator +(Term& t){//项与项的加法    
    assert(exp==t.exp);
    Term
* term=term=new Term(coef+t.coef, exp);
    
return *term;
}

/********************************************************************
*******************************************************************
*/

class Polynominal{//多项式,用一个链表存储
    friend istream& operator>>(istream&, Polynominal&);
    friend ostream
& operator<<(ostream&, Polynominal&);
public:
    Polynominal
& operator+(Polynominal&);
private:
    list
<Term> pList;
};

istream
& operator>>(istream& in, Polynominal& poly){//输入Polynominal
    int n=0;
    cout
<<"Input NUM of Term: "<<endl;
    cin
>>n;
    cout
<<"Input Every Term of The Polynominal: "<<endl;
    Term t(
0,0);
    
for(int i=0;i<n;i++){
        cin
>>t;
        poly.pList.push_back(t);
    }
    
return in;
}

template 
<class T>
ostream
& operator<<(ostream& out, list<T>& myList){//重载实现对list的输出
    list<T>::iterator iter;
    
for(iter=myList.begin();iter!=myList.end();iter++)
        cout
<<*iter<<" ";
    cout
<<endl;
    
return out;
}

ostream
& operator<<(ostream& out, Polynominal& poly){//输出Polynominal
    out<<poly.pList;
    
return out;
}

posted on 2008-10-23 18:44 deep2 阅读(1475) 评论(2)  编辑 收藏 引用 所属分类: 链表

评论

# re: 稀疏多项式的实现 2008-10-25 16:51 金山词霸2008

稀疏多项式一般用于什么场合呢?  回复  更多评论   

# re: 稀疏多项式的实现 2008-10-25 17:14 deep2

@金山词霸2008
比如:A = 3x^99 + 4x^999
B = 2x^2 + 6x^99
求 A+B  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2008年10月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

常用链接

留言簿(1)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜