题目:
设计函数求一元多项式的导数。(注:x
n
(n为整数)的一阶导数为nx
n−1
。)
输入格式:
以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。
输出格式:
以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0。
输入样例:
3 4 -5 2 6 1 -2 0
输出样例:
12 3 -10 1 6 0
本人代码:
#include
using namespace std;
class Number
{
public:
int _front;
int _finger;
void NumChange()
{
_front *= _finger;
if(_finger) _finger–;
}
};
int main()
{
class Number num[1050];
int cnt=0;
do
{
cin >> num[cnt]._front >> num[cnt]._finger;
cnt++;
}while(cin.get()!='\n');
for(int i=0;i<cnt;i++)
num[i].NumChange();
if(cnt == 1 && num[cnt-1]._front ==0 && num[cnt-1]._finger ==0)
cout <<"0 0"; //这一个判断存在一点问题
else
{
for(int i=0;i<cnt;i++)
{
if(num[i]._front!=0 || num[i]._finger!=0)
cout<< num[i]._front<<" " << num[i]._finger;
if(num[cnt-1]._front==0)
{
if(i <cnt-2)
cout <<" ";
}
if(num[cnt-1]._front!=0)
{
if(i <cnt -1)
cout <<" ";
}
}
}
return 0;
}
tips:见代码区中注释处,再经过几次测试后,我发现pat的oj好像没有添加只有常数项这一种判定。因为本人第一次写判定的时候是cnt == 1 && num[cnt]._front ==0 && num[cnt]._finger ==0 这种形式,很明显这个cnt这块出了问题,cnt是输入类数组的长度,而数组最后一个元素在数组中的下标是cnt-1。但是奇怪的是我第一次提交的代码居然全部ac了,我也是自己在vs中调试了一阵才发现不对劲,而且改了代码之后pat同样ac,我猜测是测试数据里面没有只含有常数项的多项式。