2-1 一元多项式求导
分数 5
作者 DS课程组
单位 浙江大学
设计函数求一元多项式的导数。
输入格式:
以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
注意:零多项式用 0 0 表示。
输出格式:
以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。
输入样例:
输出样例:
答案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| #include <iostream> using namespace std;
typedef struct LNode { int coeff; int exp; struct LNode *next; } LNode, *LinkList;
void initList(LinkList &L) { L = new LNode; L->next = NULL; }
void insertAtTail(LinkList &tail, int coeff, int exp) { LNode *newNode = new LNode; newNode->coeff = coeff; newNode->exp = exp; newNode->next = NULL; tail->next = newNode; tail = newNode; }
void differentiate(LinkList &L) { LinkList p = L->next; while (p != NULL) { if (p->exp == 0) { p->coeff = 0; return; } p->coeff = p->coeff * p->exp; p->exp = p->exp - 1; p = p->next; } }
void printList(LinkList L) { LinkList p = L->next; bool isFirst = true; if (p->coeff == 0) { cout << "0 0"; } while (p != NULL) { if (p->coeff == 0) { break; } if (!isFirst) { cout << " "; } cout << p->coeff << " " << p->exp; p = p->next; isFirst = false; } }
int main() { LinkList L; initList(L); int coeff, exp; LNode *tail = L;
while (cin >> coeff >> exp) { insertAtTail(tail, coeff, exp); } differentiate(L); printList(L); }
|
遇到的问题
1.如何知道停止读取
使用 cin 流状态判断:
循环读取系数(coeff)和指数(exp),当 cin >> coeff >> exp 返回 false 时停止(即输入流中无更多有效整数,或遇到换行、EOF 等结束符)。
示例代码片段:
1 2 3 4
| int coeff, exp; while (cin >> coeff >> exp) { }
|
2.pta上是完全正确,不知道为啥我的编译器不输出
(在您本地运行时) 确保输入数据后按 $\text{EOF}$ 键($\text{Ctrl}+\text{D}$ 或 $\text{Ctrl}+\text{Z}$)以退出输入循环