设计函数求一元多项式的导数。
输入格式:
以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:
以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。
输入样例:
3 4 -5 2 6 1 -2 0
输出样例:
12 3 -10 1 6 0
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
代码如下:
#include<iostream>
using namespace std;
class Polydata {
public:
int coef;
int expn;
};
//定义链表
typedef struct Node
{
Polydata data;
struct Node* next;
}Node;
//定义多项式类
class Polynomial {
public:
Node* head;
void InputList();
void Deri();
void Output();
};
//输入
void Polynomial::InputList()
{
head = new Node;
head->next = NULL;
Node* temp, * last = head;
float coef;
int expn;
do {
cin >> coef;
if (coef == 0) break;
cin >> expn;
temp = new Node;
temp->next = NULL;
temp->data.coef = coef;
temp->data.expn = expn;
last->next = temp;
last = temp;
} while (getchar() != '\n');
}
//求导
void Polynomial::Deri()
{
Node* p = head->next;
Node* pre = head;
while (p != NULL) {
if (p->data.expn != 0) {
p->data.coef *= p->data.expn;
p->data.expn -= 1;
}
else {
pre->next = p->next;
}
pre = pre->next;
p = p->next;
}
}
//输出
void Polynomial::Output()
{
Node* L = head;
L = L->next;
if (L == NULL) {
cout << "0 0" << endl;
return;
}
while (L != NULL) {
if (L->next != NULL)
cout << L->data.coef << " " << L->data.expn << " ";
else
cout << L->data.coef << " " << L->data.expn << endl;
L = L->next;
}
}
//测试
int main() {
Polynomial sa;
sa.InputList();
sa.Deri();
sa.Output();
return 0;
}