题目:
设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为nxn−1。)
输入格式:
以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。
输出格式:
以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0
。
输入样例:
3 4 -5 2 6 1 -2 0
输出样例:
12 3 -10 1 6 0
思路:
核心做法就是把输入的系数和指数进行处理,系数改为原系数乘以原指数,指数改为原指数减一,然后把系数不为0的数输出就行了
但是如何逐个获取各个数的系数和指数并存储是关键
获取的话既然用空格隔开,可以用stringstream字符串流来分割
存储的话就用一个结构体来存分割后的数字
还有题目最后那个"零多项式"输出0 0,其实就是如果系数和指数都是零(而不单单是系数为零),那么
就输出0 0
代码:
#include<iostream>
#include<sstream>
#include<vector>
using namespace std;
struct deri{
int coe,expo;//coe系数,expo指数
};
int main()
{
string str;
vector<deri> vec,res;
deri temp;
getline(cin,str);
stringstream ss;
ss<<str;
while(ss>>temp.coe>>temp.expo)//字符流输入时遇到空格截断,然后跳过空格,继续给下个变量输入
vec.push_back(temp);//当字符流为空时,就会返回0,跳出循环
for(vector<deri>::iterator it=vec.begin();it!=vec.end();it++)
{
(*it).coe*=(*it).expo;
(*it).expo-=1;
if((*it).coe!=0)
res.push_back((*it));//将符合的结构体存到res中
if((*it).coe==0&&(*it).expo==0)
res.push_back((*it));
}
if(res.size()==0)
cout<<"0 0";//如果没有符合的结构体的话就直接输出个0 0
else
{
for(vector<deri>::iterator it=res.begin();it!=res.end();it++)
{
cout<<(*it).coe<<" ";
cout<<(*it).expo;
if(it!=res.end()-1)
cout<<" ";
}
}
return 0;
}