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次项的情况,这是本题的一个陷阱。