前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OJ刷题记录:一元多项式的运算 题目编号:463

OJ刷题记录:一元多项式的运算 题目编号:463

作者头像
英雄爱吃土豆片
发布2020-10-29 11:01:42
5290
发布2020-10-29 11:01:42
举报
文章被收录于专栏:英雄爱吃土豆片

一元多项式的运算 题目编号:463

题目要求: 已知一元多项式:A(x)=a0+a1x+a2x2+a3x3+….anxn, B(x)= b0+b1x+b2x2+b3x3+….bmxm设计算法实现C(x)=A(x)+B(x)。功能包括输入多项式A,输入多项式B,求A和B的和,显示求和后的结果等操作。本题中,链表的第一个元素位置为1,链表的数据域有两个值 : coef exp 其中coef为系数,exp为指数。 输入描述 各个命令以及相关数据的输入格式如下: 输入多项式A:A,接下来的n行是要输入的多项式,每一行数据有两个值, 第一个值代表系数,第二个值代表指数,当第一个值为0时,多项式A输入结束 输入多项式B:B,接下来的n行是要输入的多项式,每一行数据有两个值, 第一个值代表系数,第二个值代表指数,当第一个值为0时,多项式B输入结束 求多项式A和B的和:C 当输入的命令为E时,程序结束 输出描述 当输入的命令为C时,请输出A和B两个多项式的和,输出格式与输入格式相同 注意,所有的元素均占一行 输入样例 A 3 1 1 2 -1 10 4 12 -1 100 0 1 B -4 0 1 1 -3 2 1 6 -1 9 10 12 1 100 0 1 C E 输出样例 -4 0 4 1 -2 2 1 6 -1 9 -1 10 14 12

解题思路: 。。。

通关代码:

代码语言:javascript
复制
#include <iostream>

using namespace std;

struct Node {
	int _coef;
	int _exp;
	Node* _next;
	Node(int coef, int exp):_coef(coef), _exp(exp), _next(NULL) {}
};

class Polynomial {
	public:
		Polynomial();
		~Polynomial();

	public:
		void Insert(int coef, int exp);
		void Print();
		Node* getHead();

	private:
		Node* head_;
		Node* rear_;
};

Polynomial::Polynomial() {
	head_ = new Node(0, 0);
	rear_ = head_;
}

Polynomial::~Polynomial() {
	Node* afterHead = NULL;

	for (Node* p = head_; p != NULL; p = afterHead) {
		afterHead = p->_next;
		delete p;
	}
}

void Polynomial::Insert(int coef, int exp) {
	Node* node = new Node(coef, exp);

	rear_->_next = node;
	rear_ = node;
}

void Polynomial::Print() {
	for (Node* p = head_->_next; p != NULL; p = p->_next) {
		cout << p->_coef << ' ' << p->_exp << endl;
	}
}

Node* Polynomial::getHead() {
	return head_;
}

void getResToA(Polynomial &A, Polynomial &B) {
	Node* previousA = A.getHead();
	Node* previousB = B.getHead();
	Node* pA = previousA->_next;
	Node* pB = previousB->_next;
	Node* temp = NULL;
	
	while (pA != NULL && pB != NULL) {
		if (pA->_exp < pB->_exp) {
			previousA = pA;
			pA = pA->_next;
		} else if (pA->_exp > pB->_exp) {
			temp = pB->_next;
			previousA->_next = pB;
			pB->_next = pA;
			previousA = pB;
			pB = temp;
			previousB->_next = pB;
		} else {
			pA->_coef = pA->_coef + pB->_coef;
			if (pA->_coef == 0) {
				previousA->_next = pA->_next;
				delete pA;
				pA = previousA->_next;
			} else {
				previousA = pA;
				pA = pA->_next; 
			}
			previousB->_next = pB->_next;
			delete pB;
			pB = previousB->_next;
		}
	}
	if (pB != NULL) previousA->_next = pB;
}

int main() {
	Polynomial A, B;
	char key;
	int coef, exp;

	while (cin >> key) {
		if (key == 'E') break;

		switch (key) {
			case 'A':
				while (true) {
					cin >> coef >> exp;
					if (coef == 0) break;
					A.Insert(coef, exp);
				}
				break;

			case 'B':
				while (true) {
					cin >> coef >> exp;
					if (coef == 0) break;
					B.Insert(coef, exp);
				}
				break;

			case 'C':
				getResToA(A, B);
				A.Print();
				break;
		}
	}

	return 0;
}

毕。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/09/28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一元多项式的运算 题目编号:463
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档