用链表多项式乘法java_用链表实现多项式的加法和乘法

1 #include

2 #include

3 #include

4 #include

5 #include

6 using namespacestd;7

8

9 structPolynomial{10 intCoef;11 intExponent;12 Polynomial*Next;13 };14

15 Polynomial* ReadDataFromFile(Polynomial* Poly, string s); //Read polynomial data from a file

16 void PrintPolynomial(Polynomial* Poly); //Output polynomial to the screen

17 void WriteToFile(Polynomial* Poly, string s); //Write polynomial data to a file

18 int research(Polynomial* Poly, intEpt);19 Polynomial* MultPolynomial(Polynomial* Poly1, Polynomial* Poly2, Polynomial* PolyMult); //Multiply two polynomials

20 Polynomial* AddPolynomial( Polynomial* Poly1,Polynomial* Poly2); //Adding two polynomials

21

22

23

24 Polynomial*Poly1;25 Polynomial*Poly2;26 Polynomial* PolySum; //The result of adding two polynomials

27 Polynomial* PolyMult; //The result of multiplying two polynomials

28

29 intmain() {30 string s1 = "data1.txt";31 string s2 = "data2.txt";32 Poly1 =ReadDataFromFile(Poly1, s1);33 Poly2 =ReadDataFromFile(Poly2, s2);34 cout << "P1(X)=";35 PrintPolynomial(Poly1);36 cout << "P2(X)=";37 PrintPolynomial(Poly2);38

39 s1 = "dataSum.txt";40 s2 = "dataMult.txt";41 PolyMult =MultPolynomial(Poly1, Poly2, PolyMult);42 cout << "P2(X)=P1(X)*P2(X)=";43 PrintPolynomial(PolyMult);44

45 PolySum =AddPolynomial(Poly1, Poly2);46 cout << "F1(X)=P1(X)+P2(X)=";47 PrintPolynomial(PolySum);48

49 WriteToFile(PolySum, s1);50 WriteToFile(PolyMult, s2);51

52 system("pause");53 }54

55 Polynomial* ReadDataFromFile(Polynomial* Poly, strings) {56 Poly = newPolynomial;57 Poly->Coef = 0;58 Poly->Exponent = 0;59 Poly->Next =NULL;60

61 ifstream infile(s.c_str());62 intCoef, Ept;63

64 if(infile.fail()) {65 cerr << "error" <> Coef >>Ept;71 q = newPolynomial;72 q->Coef =Coef;73 q->Exponent =Ept;74 q->Next =NULL;75

76 p->Next =q;77 p =q;78 }79 infile.close();80 returnPoly;81 }82 void PrintPolynomial(Polynomial*Poly) {83 if (Poly->Next ==NULL) {84 cerr << "List is empty";85 abort();86 }87 Polynomial *p;88 p = Poly->Next;89 intCoef, Ept;90 string s = "";91 stringtmp;92 while(p) {93 Coef = p->Coef;94 Ept = p->Exponent;95

96 if (Coef > 0) {97 if (Ept == 0) {98 stringstream ss;99 ss << Coef<>tmp;101 s +=tmp;102 }103 else{104 stringstream ss;105 ss << Coef << "X^" << Ept << '+';106 ss >>tmp;107 s +=tmp;108 }109 }110 else if (Coef < 0) {111 if (Ept == 0) {112 stringstream ss;113 ss << Coef<>tmp;115 int len =s.length();116 s = s.substr(0, len - 1);117 s +=tmp;118 }119 else{120 stringstream ss;121 ss << Coef << "X^" << Ept << '+';122 ss >>tmp;123 int len =s.length();124 s = s.substr(0, len - 1);125 s +=tmp;126 }127 }128

129 p = p->Next;130 }131 int len =s.length();132 if (s[len - 1] == '+') {133 cout << s.substr(0, len - 1) <

138 void WriteToFile(Polynomial* Poly, strings) {139 Polynomial*p;140 ofstream outfile(s.c_str());141 if(outfile.fail()) {142 abort();143 }144 p = Poly->Next;145 intCoef, Ept;146 while(p) {147 Coef = p->Coef;148 Ept = p->Exponent;149 outfile << Coef << " " << Ept << " ";150 p = p->Next;151 }152 outfile.close();153 }154

155 Polynomial* MultPolynomial(Polynomial* Poly1, Polynomial* Poly2, Polynomial*PolyMult) {156 Polynomial *p1, *p2, *front;157

158 p1 = Poly1->Next;159 p2 = Poly2->Next;160 PolyMult = newPolynomial;161

162 PolyMult->Next =NULL;163 intCoef1, Ept1;164 intCoef2, Ept2;165 while(p1) {166 Coef1 = p1->Coef;167 Ept1 = p1->Exponent;168

169 p2 = Poly2->Next;170 while(p2) {171 Coef2 = p2->Coef;172 Ept2 = p2->Exponent;173

174 intCoef, Ept;175

176 Coef = Coef1*Coef2;177 Ept = Ept1 +Ept2;178

179 Polynomial* rsh=PolyMult;180 front = PolyMult->Next;181 if (rsh&&rsh->Exponent !=Ept) {182 while (rsh->Next&&rsh->Next->Exponent !=Ept) {183 rsh = rsh->Next;184 }185 }186

187 if (rsh->Next) {188 //cout << "rsh->Coef " << rsh->Coef << "rsh->Exponent " << rsh->Exponent << endl;189 //cout << "Coef " << Coef << endl;190 //cout << rsh->Next->Coef << " " << Coef << endl;191 //cout << Coef1 << " " << Coef2 << endl;

192 rsh->Next->Coef +=Coef;193 //cout << "rsh->Coef " << rsh->Next->Coef << "rsh->Exponent " << rsh->Next->Exponent << endl;

194 }195 else{196 Polynomial *q = newPolynomial;197 q->Coef =Coef;198 q->Exponent =Ept;199 q->Next =NULL;200 rsh->Next =q;201

202 //cout << "q->Coef " << q->Coef << "q->Exponent " << q->Exponent << endl;

203

204 }205

206 p2 = p2->Next;207 }208

209 p1 = p1->Next;210 }211 //system("pause");

212 returnPolyMult;213 }214

215

216 Polynomial* AddPolynomial(Polynomial* Poly1, Polynomial*Poly2) {217 Polynomial *PolySum = newPolynomial;218 PolySum->Next =NULL;219

220 Polynomial *p1, *p2,*q, *front;221

222 p1 = Poly1->Next;223 Polynomial* p=PolySum;224 while(p1) {225 q = newPolynomial;226 q->Coef = p1->Coef;227 q->Exponent = p1->Exponent;228 q->Next =NULL;229

230 p->Next =q;231 p =q;232 p1 = p1->Next;233 }234

235

236 intCoef2, Ept2;237

238 p2 = Poly2->Next;239 while(p2) {240 Coef2 = p2->Coef;241 Ept2 = p2->Exponent;242

243 p1 = PolySum->Next;244 front = PolySum->Next;245 while (p1&&p1->Exponent!=Ept2) {246 front =p1;247 p1 = p1->Next;248 }249 if(p1) {250 p1->Coef +=Coef2;251 }252 else{253 q = newPolynomial;254 q->Coef =Coef2;255 q->Exponent =Ept2;256 q->Next =NULL;257

258 front->Next =q;259 //cout << "Coef2 " << Coef2 << " " << "Ept2 " << Ept2 << endl;

260 }261 p2 = p2->Next;262 }263

264 returnPolySum;265 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值