标签:blog io os sp for on 2014 log amp
/* 一元多项式求导 (25)
设计函数求一元多项式的导数。
输入格式:
以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。
数字间以空格分隔。
输出格式:
以与输入相同的格式输出导数多项式非零项的系数和指数。
数字间以空格分隔,但结尾不能有多余空格。
注意“零多项式”的指数和系数都是0,但是表示为“0 0”。
输入样例:
3 4 -5 2 6 1 -2 0 即 3X^4 - 5X^2 + 6X - 2
输出样例:
12 3 -10 1 6 0 即 12X^3 - 10X + 6 - 0
导数:
aX^n 的导数为 a*nX^(n-1),在本题中即输出 a*n n-1
常数的导数为 0
*/
#pragma once
#include<vector>
#include<sstream>
#include<iostream>
#include<string>
using namespace std;
struct Item
{
int e;
int n;
};
void Input(vector<Item>&vec)
{
string line;
Item it;
int num;
bool bN = true;
getline(cin, line, '\n');
istringstream stream(line);
while(stream >> num)
{
static int i = 0;
if(bN)
it.n = num;
else
it.e = num;
if(++i%2==0)
vec.push_back(it);
bN = !bN;
}
}
// 合并同类顶
void Comb(vector<Item>&a, vector<Item>&b)
{
int size = a.size();
int i;
for(i = 0; i < size-1; ++i)
{
if(a[i].e == a[i + 1].e)
{
a[i+1].n += a[i].n;
}
else
{
if(a[i].n != 0)
b.push_back(a[i]);
}
}
// 最后漏掉的一个
if( a[i].n != 0)
b.push_back(a[i]);
}
void Output(vector<Item>&vec)
{
int size = vec.size();
if( (size == 1 && vec[0].e == 0 && vec[0].n==0) || size == 0)
{
cout << "0 0" << endl;
return;
}
for(int i = 0; i < size; ++i)
{
if(vec[i].e == 0)
cout << '0';
else if(vec[i].e - 1 == 0)
cout << vec[i].n;
else
{
cout << vec[i].n * vec[i].e << ' ';
cout << vec[i].e - 1;
}
if(i != size - 1)
cout << ' ';
}
cout << endl;
}
void Run()
{
vector<Item>vec, der;
Input(vec);
Comb(vec, der);
Output(der);
}
int main(void)
{
Run();
return 0;
}标签:blog io os sp for on 2014 log amp
原文地址:http://blog.csdn.net/mywsfxzxb/article/details/42012025