1010 一元多项式求导 (25)(25 分)
设计函数求一元多项式的导数。(注:x^n^(n为整数)的一阶导数为n*x^n-1^。)
输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是0,但是表示为“0 0”。
输入样例:
3 4 -5 2 6 1 -2 0
输出样例:
12 3 -10 1 6 0
*思路:这个题看题意还是挺简单的,敲出来不难,就是对特殊情况的处理,每次理解它的题意都得好久,然后通过别人代码来理解,否则就是部分正确,首先就是不知道到底会有多少个系数,所以数组我尽量开的大了一些,对特殊情况的处理就是:如果不是零多项式,只要系数或者指数为0,就不输出;
如果是零多项式,则输出”0 0”,对于结果我是存在一个单独的数组中一起输出,看了看有简单的代码每输入两个数就输出结果的*
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a[10010];
int b[10010];
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
int i = 0,j = 0,k;
int flag = 0; //flag标记是否为零多项式
//连续输入未知个带有空格的数字
cin>>a[i++];
while(cin.get() != '\n')
{
cin>>a[i++];
}
for(k = 0; k < i-1; k = k+2)
{
if(a[k] != 0 && a[k+1] == 0)
{
continue;
}
else if(a[k] == 0 && a[k+1] != 0)
{
continue;
}
else if(a[k] == 0 && a[k+1] == 0)
{
continue;
}
else
{
flag = 1; //非零多项式
b[j++] = a[k] * a[k+1];
b[j++] = a[k+1] - 1;
}
}
if(flag == 0)
{
cout<<"0 0";
}
for(k = 0; k < j; k++)
{
if(k == 0)
cout<<b[k];
else
cout<<" "<<b[k];
}
cout<<endl;
return 0;
}