多项式相加(数组形式)

题目内容:
一个多项式可以表达为x的各次幂与系数乘积的和,比如:
2x6+3x5+12x3+6x+20
现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出。
程序要处理的幂最大为100。

输入格式:
总共要输入两个多项式,每个多项式的输入格式如下:
每行输入两个数字,第一个表示幂次,第二个表示该幂次的系数,所有的系数都是整数。第一行一定是最高幂,最后一行一定是0次幂。
注意第一行和最后一行之间不一定按照幂次降低顺序排列;如果某个幂次的系数为0,就不出现在输入数据中了;0次幂的系数为0时还是会出现在输入数据中。

输出格式:
从最高幂开始依次降到0幂,如:
2x6+3x5+12x3-6x+20
注意其中的x是小写字母x,而且所有的符号之间都没有空格,如果某个幂的系数为0则不需要有那项。

1.存储数组类型

typedef struct {
   
	int coef;
	int expon;
}Polynomial;
Polynomial polynomial_1[MaxSize]; //多项式一
Polynomial polynomial_2[MaxSize];  //多项式二
Polynomial polynomial_3[MaxSize];  //相加之后的多项式

2.主函数

(主函数表达思路,再去写函数)

int main(){
   
	int length1=1,length2=1;
	//构造多项式数组
	length1=MakePolynomial(polynomial_1,length1);
	length2=MakePolynomial(polynomial_2,length2);
	//多项式相加
	AddPoly(polynomial_1,polynomial_2,length1,length2);
	//输出新的多项式(这个函数太坑了)
	PrintPoly();
	return 0;
}

3.构造多项式数组

int count=0;
int MakePolynomial(Polynomial polynomial[],int length){
   
	scanf("%d%d",&polynomial[0].expon,&polynomial[0].coef);
	if(polynomial[0].expon>100) return -1;   //最高幂为100
	else{
   
	int i=0;
	while(polynomial[i].expon!=0){
   
		i++;
		scanf("%d%d",&polynomial[i].expon,&polynomial[i].coef);
		length++;  //length记录数组长度
	}
	return length;}
}

4.多项式相加

void AddPoly(Polynomial poly_1[],Polynomial poly_2[],int len1,int len2){
   
	int i=0,j=0;
	int sum=0;
	while(i<len1&&j<len2){
   
	if(poly_1[i].expon==poly_2[j].expon){
   
			sum=poly_1[i].coef+poly_2[j].coef;
			if(sum!=0||poly_1[i].expon==0) {
     //0次幂的系数为0时还是会出现在输入数据中
			polynomial_3[count].coef=sum;
			polynomial_3[count].expon=poly_1[i].expon;
			count++;
			}
			i++;j++;
		}
		else if(poly_1[i].expon>poly_2[j].expon){
   
			polynomial_3[count]
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 链表可以用来实现多项式的相加,可以考虑以下步骤: 1. 定义一个节点表示多项式的每一项,包含两个成员变量:系数和指数。 2. 定义一个链表,每个节点表示多项式的一项。 3. 将多项式转换为链表,按照指数从高到低的顺序插入节点,如果插入的指数已经存在,则将系数相加。 4. 遍历两个链表,将对应指数的系数相加,生成结果链表。 以下是一个 C++ 代码示例: ```cpp #include <iostream> using namespace std; struct PolyNode { int coef; // 系数 int expn; // 指数 PolyNode* next; }; void createPolyList(PolyNode*& head) { int n; cout << "请输入多项式项数:"; cin >> n; head = new PolyNode; head->next = NULL; PolyNode* p = head; for (int i = 1; i <= n; i++) { PolyNode* node = new PolyNode; cout << "请输入第" << i << "项的系数和指数:"; cin >> node->coef >> node->expn; node->next = NULL; p->next = node; p = node; } } void printPolyList(PolyNode* head) { PolyNode* p = head->next; while (p) { cout << p->coef << "x^" << p->expn; p = p->next; if (p) cout << " + "; } cout << endl; } void addPolyList(PolyNode* head1, PolyNode* head2, PolyNode*& head3) { PolyNode* p1 = head1->next; PolyNode* p2 = head2->next; head3 = new PolyNode; head3->next = NULL; PolyNode* p3 = head3; while (p1 && p2) { if (p1->expn < p2->expn) { PolyNode* node = new PolyNode; node->coef = p1->coef; node->expn = p1->expn; node->next = NULL; p3->next = node; p3 = node; p1 = p1->next; } else if (p1->expn > p2->expn) { PolyNode* node = new PolyNode; node->coef = p2->coef; node->expn = p2->expn; node->next = NULL; p3->next = node; p3 = node; p2 = p2->next; } else { PolyNode* node = new PolyNode; node->coef = p1->coef + p2->coef; node->expn = p1->expn; node->next = NULL; p3->next = node; p3 = node; p1 = p1->next; p2 = p2->next; } } while (p1) { PolyNode* node = new PolyNode; node->coef = p1->coef; node->expn = p1->expn; node->next = NULL; p3->next = node; p3 = node; p1 = p1->next; } while (p2) { PolyNode* node = new PolyNode; node->coef = p2->coef; node->expn = p2->expn; node->next = NULL; p3->next = node; p3 = node; p2 = p2->next; } } int main() { PolyNode* head1, * head2, * head3; createPolyList(head1); createPolyList(head2); addPolyList(head1, head2, head3); cout << "多项式1:"; printPolyList(head1); cout << "多项式2:"; printPolyList(head2); cout << "相加结果:"; printPolyList(head3); return 0; } ``` 该程序通过 createPolyList 函数创建两个多项式的链表,再通过 addPolyList 函数实现多项式相加,并将结果存储在 head3 中,最后通过 printPolyList 函数输出结果链表。 ### 回答2: 数据结构中的链表是由一系列节点组成的动态数据结构,其中每个节点包含两部分:数据域和指针域。数据域用于存储数据元素,而指针域用于指向下一个节点。 多项式相加是指将两个多项式相加得到一个新的多项式。多项式可以看作由一系列项组成,每个项包含一个系数和一个指数。例如,多项式4x^3 + 2x^2 + 5x + 1可以表示为链表的形式:(4, 3) -> (2, 2) -> (5, 1) -> (1, 0)。 对于链表的多项式相加,可以按照以下步骤进行操作: 1. 创建两个空链表,用来存储两个多项式的和。 2. 从两个多项式的头节点开始,依次比较指数的大小。 3. 如果指数相同,将两个多项式的系数相加,并创建一个新节点将其存储到链表中。 4. 如果其中一个多项式的指数较小,将对应的节点复制到和链表中。 5. 继续以上步骤,直到遍历完两个多项式。 6. 如果有一个多项式还有项未处理,则将其余的项都复制到和链表中。 最终得到的和链表中包含了输入的两个多项式的和。我们可以根据需要对和链表进行进一步的处理,比如输出到屏幕上或者存储到文件中。 链表作为一种灵活而常用的数据结构,可以被广泛应用于多项式相加、图形算法等领域。通过合理地使用链表,我们可以高效地实现多项式相加的操作。 ### 回答3: 数据结构中,多项式的相加可以使用链表来实现。链表是一种常用的数据结构,它由一系列节点组成,每个节点包含一个数据元素和指向下一个节点的指针。 在多项式相加中,我们可以将每个项表示为一个节点,并按照指数从小到大的顺序插入到链表中。每个节点包含两个数据元素,一个是系数,另一个是指数,这样可以很方便地表示多项式的每一项。 首先,我们需要创建两个链表,分别表示两个多项式。然后,我们按照项的指数顺序将每个项插入到链表中。当插入时,我们需要比较当前项的指数与链表中已存在的项的指数大小来确定插入位置。 在插入过程中,如果遇到两个节点的指数相同,我们需要将它们的系数相加并更新对应节点的系数值。如果链表中不存在对应的指数,则直接将新的节点插入到链表中。 最后,我们可以将链表中的每个节点打印出来,即可得到多项式相加的结果。需要注意的是,我们在输出结果时,可以根据节点的系数值是否为零来决定是否输出该项,以避免输出不必要的项。 使用链表来实现多项式的相加,可以保持多项式的有序性,同时避免使用数组或其他线性结构时的元素移动或扩容操作,提高了插入和删除的效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值