這個是題干
題目描述
一個一元多項式可以看作由若干個一元單項式按降冪排列成的線性表。請撰寫程式對輸入的兩個一元多項式求和,并輸出求和的結果。
輸入
輸入為兩個一元多項式,每個一元多項式輸入一行,按照降冪依次輸入每個單項式的系數和指數,并以-1 -1作為結束。系數和指數均為整數,指數不小于0。
輸出
輸出為求和結果多項式,按照降冪依次輸出每個單項的系數和指數,每個數值后面用一個空格隔開,輸出結果多項式后換行。 系數為0的單項式不得輸出——除非結果多項式就是0,則直接輸出0。
樣例輸入 Copy
2 7 3 5 12 1 6 0 -1 -1
7 5 9 4 3 0 -1 -1
樣例輸出 Copy
2 7 10 5 9 4 12 1 9 0
下面是我的解法 我在debug程序中在Add函式中出現了segment fault 是哪里錯了要怎么改呢
順帶一提這類錯誤以后怎么避免呢 最近做鏈表出錯了好多次。
#include<iostream>
using namespace std;
typedef struct PNode{
int coef;
int expon;
struct PNode *next;
}PNode,*Polynomial;
void CreatePoly(Polynomial &p){
p=new PNode;
p->next=NULL;
Polynomial q,r;
r=p;
while(1){
q=new PNode;
q->next=NULL;
cin>>q->coef>>q->expon;
if(q->coef==-1&&q->expon==-1) break;
r->next=q;
r=q;
}
delete q;
}
void PrintPoly(Polynomial p){
Polynomial q;
q=p->next;
while(q){
printf("%d %d ",q->coef,q->expon);
q=q->next;
}
printf("\n");
}
void Add(Polynomial &pa,Polynomial &pb){
Polynomial p1,p2,p3,temp1,temp2; p1=pa->next; p2=pb->next; p3=pa;
int sum=0;
while(p1&&p2){
if(p1->expon==p2->expon){
sum=p1->coef+p2->coef;
if(sum==0){
temp1=p1; temp2=p2;
p1=p1->next; p2=p2->next;
pa->next=p1; pb->next=p2;
delete temp1; delete temp2;
}
if(sum!=0){
p1->coef=sum;
p3->next=p1; p3=p1; p1=p1->next;
temp2=p2; p2=p2->next; pb->next=p2; delete temp2;
}
}
if(p1->expon!=p2->expon){
if(p1->expon>p2->expon){
p3->next=p1;
p3=p1;
p1=p1->next;
}
else{
p3->next=p2;
p3=p2;
p2=p2->next;
}
}
}
p3->next = p1?p1:p2;
// if(p1){
// p3->next=p1;
// }
// if(p2){
// p3->next=p2;
// }
delete pb;
PrintPoly(pa);
}
int main(){
Polynomial p1,p2;
CreatePoly(p1);
// PrintPoly(p1);
CreatePoly(p2);
// PrintPoly(p2);
Add(p1,p2);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/92070.html
標籤:C++ 語言
