1. 程式人生 > >1010 一元多項式求導 (25)(25 分)通俗詳解

1010 一元多項式求導 (25)(25 分)通俗詳解

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