# Program to differentiate the given Polynomial

Given a polynomial string str, the task is to differentiate the given string and print the string after differentiating it.

Note: The input format is such that there is a whitespace between a term and the ‘+’, ’-’ symbol

Examples:

Input: str = “4X3 + 3X1 + 2X2
Output: “12X2 + 3X0 + 4X1
Explanation:
The derivative of p(x) = A*XN is p'(x) = A * N * XN – 1

Input: str = “5X4 + 6X2 + 5X2
Output: “20X3 + 12X1 + 10X1

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach: The idea is to observe that when the given equation consists of multiple polynomials , the differentiation of the given polynomial .

And, it is known that the derivative of is Therefore, we split the given string and differentiate every term in it.

Below is the implementation of the above approach:

 `// C++ program to differentiate the ` `// given polynomial ` ` `  `#include "bits/stdc++.h" ` `#define MOD (1e9 + 7); ` `using` `ll = int64_t; ` `using` `ull = uint64_t; ` `#define ll long long ` `using` `namespace` `std; ` ` `  `// Function to differentiate the ` `// given term ` `string diffTerm(string pTerm) ` `{ ` `    ``// Get the coefficient ` `    ``string coeffStr = ``""``, S = ``""``; ` `    ``int` `i; ` ` `  `    ``// Loop to get the coefficient ` `    ``for` `(i = 0; pTerm[i] != ``'x'``; i++) ` `        ``coeffStr.push_back(pTerm[i]); ` ` `  `    ``long` `long` `coeff ` `        ``= ``atol``(coeffStr.c_str()); ` ` `  `    ``// Loop to get the power of each term ` `    ``string powStr = ``""``; ` `    ``for` `(i = i + 2; i != pTerm.size(); i++) ` `        ``powStr.push_back(pTerm[i]); ` ` `  `    ``long` `long` `power ` `        ``= ``atol``(powStr.c_str()); ` `    ``string a, b; ` ` `  `    ``// Converting the value ` `    ``// to the string ` `    ``ostringstream str1, str2; ` ` `  `    ``// For ax^n, we find (n)*a*x^(n-1) ` `    ``coeff = coeff * power; ` `    ``str1 << coeff; ` `    ``a = str1.str(); ` `    ``power--; ` `    ``str2 << power; ` `    ``b = str2.str(); ` `    ``S += a + ``"X^"` `+ b; ` ` `  `    ``return` `S; ` `} ` ` `  `// Function to differentiate the ` `// given polynomial ` `string diffstr(string& poly) ` `{ ` ` `  `    ``// We use istringstream to get ` `    ``// the input in tokens ` `    ``istringstream is(poly); ` ` `  `    ``string pTerm, S = ``""``; ` ` `  `    ``// For every token, compute the ` `    ``// differentiation ` `    ``while` `(is >> pTerm) { ` ` `  `        ``// If the token is equal to ` `        ``// '+', '-' then ` `        ``// continue with the string ` `        ``if` `(pTerm == ``"+"``) { ` `            ``S += ``" + "``; ` `            ``continue``; ` `        ``} ` ` `  `        ``if` `(pTerm == ``"-"``) { ` `            ``S += ``" - "``; ` `            ``continue``; ` `        ``} ` ` `  `        ``// Otherwise find the differentiation ` `        ``// of that particular term ` `        ``else` `            ``S += diffTerm(pTerm); ` `    ``} ` `    ``return` `S; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``string str = ``"5x^4 + 6x^2 + 5x^2"``; ` `    ``cout << diffstr(str); ` `    ``return` `0; ` `} `

Output:

```20X^3 + 12X^1 + 10X^1
```

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.