一、首先,這個多項式是乙個鍊錶,多項式的每一項是鍊錶乙個節點,那麼可以想到兩種情況:
1)多項式只有一項或者是多項式的最後一項,那麼這個節點就只需要有係數和指數兩個元素,且不需要指向下 乙個節點。
2)多項式的其中一項,那麼這個節點就需要有係數、指數以及指向下乙個節點的指標。
class node
node (int c, int e, node * next):coef(c),exp(e) //含有指向下乙個節點的建構函式
}
另外節點要有插入的功能,所以節點類中要有公有成員函式insert()函式:
node * insert(int c, int e)
二、鍊錶是由節點構成的,且鍊錶要有新增節點、輸出鍊錶以及鍊錶相加的功能。
class nodelist
三、由於物件是類,對於輸出操作符不能直接輸出節點類,所以我們要做乙個運算子過載。
ostream & operator << (ostream & out, const node & val)
整個思路即為上面的三大塊,現在一塊一塊的分開分析。
第一塊,鍊錶元素節點:
class node
node (int c, int e, node * next):coef(c),exp(e) //含有指向下乙個節點的建構函式
node * insert (int c, int e) //在節點後插入乙個節點
friend class nodelist; //鏈結要操作節點
friend ostream & operator << (ostream &, const node &); //節點的輸出用到節點的私有成員
}
第二塊:鍊錶
class nodelist
;nodelist :: nodelist()
nodelist::~nodelist()
delete thelist;
}void nodelist:: addnode(istream & in)
else
count ++;
} if (count == 0) }
void nodelist:: output (ostream & out )const
m = thelist->link;
for (;m!= thelist; m=m->link)
m = thelist->link;
if (k==1&& m->coef == 0)
if (k==i)
for (j =0; jlink;
}out << *m;
m=m->link;
for (;m!=thelist;m=m->link)
else if (m->coef < 0)
}cout << endl;
}void nodelist::listadd(nodelist & r)
if (p->exp == q->exp)
else
}else
q1 = q1->insert(p->coef,p->exp);
p=p->link; }}
ostream & operator <<(ostream & out, const nodelist & x)
istream & operator >> (istream & in, nodelist & x)
nodelist & operator + (nodelist & a, nodelist & b )
第三塊:運算子過載,輸出物件是節點類
ostream & operator << (ostream & out, const node & val)
return out;
} if (val.coef == -1)
return out;
} else
return out;
}}
OJ 多項式加法
複習了一下stl,寫完才想起來可以用map,量 3,orz 提交時遇到一次presentation error,oj的空格輸出實在是太隨性。思路是分別對兩組輸入進行排序,再通過k1,k2兩個迭代器匯入新的容器 注意 容器為空時,begin 與end 返回相同 容器為空與容器不為空時,begin 返回...
noj 1005 多項式加法
對於輸入,由於是按指數遞減輸入的,故我們只需按照輸入順序進行儲存即可。對待乙個輸入 1.如果當前多項式為空,那麼將此項放入第一項 2.如果當前多項式不為空 3.如果有指數相同的項,那麼將此項與指數相同的項合併,如果係數變為0,則將此項刪除。4.如果沒有指數相同的項 那麼此項的指數一定比當前所有項的指...
多項式加法(二維陣列)
題目內容 乙個多項式可以表達為x的各次冪與係數乘積的和,比如 2x6 3x5 12x3 6x 20 現在,你的程式要讀入兩個多項式,然後輸出這兩個多項式的和,也就是把對應的冪上的係數相加然後輸出。程式要處理的冪最大為100。輸入格式 總共要輸入兩個多項式,每個多項式的輸入格式如下 每行輸入兩個數字,...