PAT B1010
一元多项式求导 (25分)
设计函数求一元多项式的导数。注:
x
n
x^n
xn(n为整数)的导数为
n
x
n
−
1
nx^{n-1}
nxn−1。
输入格式:
以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。
输出格式:
以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0。
输入样例:
3 4 -5 2 6 1 -2 0
输出样例:
12 3 -10 1 6 0
// ConsoleApplicationB1010.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include<cmath>
using namespace std;
int main()
{
int a[4001],b[4001];
int i, j;
i = 0;
int count = 0,flag=0;
cin >> a[0];
i++;
while (true)
{
cin >> a[i];
if (a[i]*a[i-1] != 0)//测试3通不过的原因在此,并非只有0多项式的导数为0多项式。
{
flag = 1;
}
if (a[i] == int('\n'))
{
break;
}
if (i % 2 == 1)
{
if (a[i] == 0)
{
break;
}
else
{
count++;
b[i] = a[i] - 1;
b[i - 1] = a[i] * a[i - 1];
}
}
i++;
}
if (flag)
{
for (i = 0; i < 2 * count - 1; i++)
{
cout << b[i] << " ";
}
cout << b[2 * count - 1];
}
else
{
cout << 0 << " " << 0;
}
return 0;
}
这个题目开始没有理解“零多项式的指数和系数都是 0,但是表示为 0 0”这句话,错误理解为某一项求导后指数和系数都是0的时候,该项表示为0 0。导致得分一直在19左右徘徊。
另外,本题目可以直接输出,无需使用数组存储。可以使用
while(cin>>a>>b)
while(scanf("%d %d",&a,&b)!=EOF)
输入示例。