7 您所在的位置:网站首页 2点0-0点01 7

7

2024-07-07 18:35| 来源: 网络整理| 查看: 265

设计函数分别求两个一元多项式的乘积与和。

输入格式:

输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。

输出格式:

输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。

输入样例: 4 3 4 -5 2 6 1 -2 0 3 5 20 -7 4 3 1

结尾无空行

输出样例: 15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1 5 20 -4 4 -5 2 9 1 -2 0

结尾无空行

下面是测试点提示:

0sample换个数字

答案正确

125 ms688 KB1同类项合并时有抵消

答案正确

45 ms556 KB2系数和指数取上限,结果有零多项式

答案正确

24 ms572 KB3输入有零多项式和常数多项式

答案正确

24 ms572 KB

再看一遍输出要求: 

输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0 

也就是说输出的时候乘法或者加法都是一个多项式,当这个多项式是零项多项式时候输出0 0;而不是说没输入的时候输出0 0;输入时应该输入0(第一位数字是个数的意思),此时建立的链表返回 空。

列出两种方法:(难点在于处理数据格式,0的产生很烦)

#include using namespace std; int main() { int a[1001] = { 0 }, b[1001] = { 0 }, c[1001] = { 0 },d[2001] = {0}; int num_a, num_b; int coef, expo; cin >> num_a; int max_a=0, max_b=0; for (int i = 0; i < num_a; i++) { cin >> coef >> expo; if (max_a == 0) max_a = expo; a[expo] = coef; } cin >> num_b; for (int i = 0; i < num_b; i++) { cin >> coef >> expo; if (max_b == 0)max_b = expo; b[expo] = coef; } int max = max_a > max_b ? max_a : max_b; //相乘模块 int cnt = 0; int max2 = max_a+max_b; for (int i = 0; i coef; L1 = L1->next; //每一次的指针后移不要忘了 } else if (L1->expo expo) { p->expo = L2->expo; p->coef = L2->coef; L2 = L2->next; } else { if ((L1->coef + L2->coef) == 0) { free(p); p = NULL; } else { p->expo = L1->expo; p->coef = L1->coef + L2->coef; } L1 = L1->next; L2 = L2->next; } if (p) { p->next = NULL; if (head == NULL) //链接的操作其实可以写个attach函数,减少重复代码 head = p; else tail->next = p; tail = p; } } for (; L1 != NULL; L1 = L1->next) { p = (ptr)malloc(sizeof(Node)); p->expo = L1->expo; p->coef = L1->coef; p->next = NULL; if (head == NULL) head = p; else tail->next = p; //链接的函数可简化此处 tail = p; } for (; L2 != NULL; L2 = L2->next) { p = (ptr)malloc(sizeof(Node)); p->expo = L2->expo; p->coef = L2->coef; p->next = NULL; if (head == NULL) head = p; else tail->next = p; tail = p; } if (head == NULL) { cout expo; if (c != 0) { while (rear->next && rear->next->expo>e) rear = rear->next; if (rear->next && rear->next->expo == e) { if (rear->next->coef +c== 0) { rear->next = rear->next->next; } else { rear->next->coef += c; } } else { ptr t = (ptr)malloc(sizeof(Node)); t->coef = c; t->expo = e; t->next = rear->next; rear->next = t; rear = t; } } L2 = L2->next; } L1 = L1->next; } p = p->next; cout coef next; while (p) { cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有