PAT B1010 一元多项式求导
题目描述:
设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为nxn−1。)
输入格式:
以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。
输出格式:
以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0。
输入样例:
3 4 -5 2 6 1 -2 0
输出样例:
12 3 -10 1 6 0
参考代码:
1 /***********************************************
2 PAT B1010 一元多项式求导
3 ***********************************************/
4 #include <iostream>
5 #include <vector>
6
7 using namespace std;
8
9 int main()
10 {
11 vector<int> func; //储存系数和指数,偶数位是系数,奇数位是指数
12
13 int temp = 0;
14 while (cin >> temp) {
15 func.push_back(temp);
16 }
17
18 //原方程中只有x的0次方和对应系数的时候需要特殊处理(输出“0 0”)
19 if (func.size() == 2 && func[1] == 0) {
20 func[0] = func[1] = 0;
21 }
22 else {
23 for (int i = 1; i < func.size(); i += 2) {
24 if (func[i] != 0) {
25 func[i - 1] *= func[i]--; //计算求导之后的系数和指数
26 }
27 else {
28 func.erase(func.end() - 2, func.end()); //对于x的0次方求导系数、指数均为0,但空间还在,需要删除
29 }
30 }
31 }
32
33 for (int i = 0; i < func.size(); ++i) {
34 cout << func[i];
35 if (i != func.size() - 1) cout << ' ';
36 }
37
38 return 0;
39 }
注意事项:
1:注意原方程仅有x的0次项的情况,这是本题的一个陷阱。