一元多项式求导

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;
}

猜你喜欢

转载自blog.csdn.net/qq_40014462/article/details/81532545
今日推荐