1010 一元多项式求导 (25)(25 分)通俗详解

本题链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805313708867584

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

分析:

本题难点在于对题目输出格式的处理和隐藏条件的挖掘,以下先对此进行分析:

1.输出格式处理

题目要求“数字间以空格分隔,但结尾不能有多余空格”,如果是在一个循环内统一处理格式,那么由于题目要求“输出导数多项式非零项的系数和指数”,处理难度会变得非常大且非常繁琐,于是不妨先输出一次,之后的每次输出数字前都要输出空格。再来分析“输出导数多项式非零项的系数和指数”这个条件,既然是非0项,那么原来多项式里的常数项就无需处理,也就是输出的时候只要某一项的指数为0,那么就不输出!这点很关键!

2.隐藏条件

通过仔细读题,思考,你会发现题目并未要求结束条件,说明你需要在每次输入完就输出,而不是等全部输入完了再输出!而且你需要连续输入直到文件末尾,C++的输入格式是while(cin>>a>>b),只有这样,才满足题目的要求!否则不可能通过!

本题需要注意的地方是:

 “零多项式的指数和系数都是0,但是表示为“0 0”这个条件的处理需要在第1次输入的时候判定,如果输入的系数和指数都为0,那么按照要求输出,并且及时退出程序!

 

代码:

#include<iostream>
using namespace std;
int main()
{
	int index;
	int expo;
	cin>>expo>>index;
	if(index==0)//如果指数为0 
	{
		cout<<"0 0";
		return 0;
	} 
	else//注意第一次输出的格式 ! 
	cout<<index*expo<<' '<<index-1;
	while(cin>>expo>>index)//输入直到文件末尾 
	if(index!=0)//注意如果指数为0,不作输出! 
	cout<<' '<<index*expo<<' '<<index-1;//注意要先输出空格! 
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_37729102/article/details/81607589