Given 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 white space 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”
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;
} |
import java.util.Scanner;
import java.util.StringTokenizer;
public class DifferentiatePolynomial {
static String diffTerm(String pTerm) {
// Get the coefficient
String coeffStr = "" , S = "" ;
int i;
// Loop to get the coefficient
for (i = 0 ; pTerm.charAt(i) != 'x' ; i++) {
coeffStr = coeffStr + pTerm.charAt(i);
}
long coeff = Long.parseLong(coeffStr);
// Loop to get the power of each term
String powStr = "" ;
for (i = i + 2 ; i != pTerm.length(); i++) {
powStr = powStr + pTerm.charAt(i);
}
long power = Long.parseLong(powStr);
String a, b;
// Converting the value
// to the string
StringBuilder str1 = new StringBuilder();
StringBuilder str2 = new StringBuilder();
// For ax^n, we find (n)*a*x^(n-1)
coeff = coeff * power;
str1.append(Long.toString(coeff));
a = str1.toString();
power--;
str2.append(Long.toString(power));
b = str2.toString();
S = S + a + "X^" + b;
return S;
}
static String diffstr(String poly) {
String pTerm, S = "" ;
StringTokenizer st = new StringTokenizer(poly, " +" );
// For every token, compute the differentiation
while (st.hasMoreTokens()) {
pTerm = st.nextToken();
// If the token is equal to '+', '-' then continue with the string
if (pTerm.equals( "+" )) {
S = S + " + " ;
continue ;
}
if (pTerm.equals( "-" )) {
S = S + " - " ;
continue ;
}
// Otherwise find the differentiation of that particular term
else {
S = S + diffTerm(pTerm)+ "+" ;
}
}
return S;
}
public static void main(String[] args) {
String poly = "5x^4+6x^2+5x^2" ;
String ans = diffstr(poly);
System.out.println(ans.substring( 0 ,ans.length()- 1 ));
}
} |
# Python3 program to differentiate # the given polynomial MOD = ( 1e9 + 7 )
# Function to differentiate # the given term def diffTerm(pTerm):
# Get the coefficient
coeffStr = ""
S = ""
# Loop to get the
# coefficient
i = 0
while (i < len (pTerm) and
pTerm[i] ! = 'x' ):
coeffStr + = (pTerm[i])
i + = 1
coeff = int (coeffStr)
# Loop to get the power
# of each term
powStr = ""
j = i + 2
while j < len (pTerm):
powStr + = (pTerm[j])
j + = 1
power = int (powStr)
# For ax^n, we find
# (n)*a*x^(n-1)
coeff = coeff * power
a = str (coeff)
power - = 1
b = str (power)
S + = a + "X^" + b
return S
# Function to differentiate # the given polynomial def diffstr(poly):
pTerm = poly.split( " " )
S = ""
for i in range ( len (pTerm)):
# If the token is equal to
# '+', '-' then
# continue with the string
if (pTerm[i] = = "+" ):
S + = " + "
continue
if (pTerm[i] = = "-" ):
S + = " - "
continue
# Otherwise find the differentiation
# of that particular term
else :
S + = diffTerm(pTerm[i])
return S
# Driver code if __name__ = = "__main__" :
st = "5x^4 + 6x^2 + 5x^2"
print (diffstr(st))
# This code is contributed by Chitranayal |
// C# program to differentiate the // given polynomial using System;
using System.Collections.Generic;
class GFG {
// Function to differentiate the
// given term
static 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 += (pTerm[i]);
long coeff = Convert.ToInt64(coeffStr);
// Loop to get the power of each term
string powStr = "" ;
for (i = i + 2; i != pTerm.Length; i++)
powStr += (pTerm[i]);
long power = Convert.ToInt64(powStr);
string a, b;
// For ax^n, we find (n)*a*x^(n-1)
coeff = coeff * power;
a = Convert.ToString(coeff);
power--;
b = Convert.ToString(power);
S += a + "X^" + b;
return S;
}
// Function to differentiate the
// given polynomial
static string diffstr( string poly)
{
// We use istringstream to get
// the input in tokens
string [] is1 = poly.Split( " " );
string S = "" ;
// For every token, compute the
// differentiation
foreach ( string pTerm in is1)
{
// 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
public static void Main( string [] args)
{
string str = "5x^4 + 6x^2 + 5x^2" ;
Console.WriteLine(diffstr(str));
}
} // This code is contributed by phasing17. |
// JS program to differentiate the // given polynomial let MOD = (1e9 + 7); // Function to differentiate the // given term function diffTerm(pTerm)
{ // Get the coefficient
let coeffStr = "" , S = "" ;
let i;
// Loop to get the coefficient
for (i = 0; pTerm[i] != 'x' ; i++)
coeffStr += (pTerm[i]);
let coeff
= parseInt(coeffStr);
// Loop to get the power of each term
let powStr = "" ;
for (i = i + 2; i != pTerm.length; i++)
powStr += (pTerm[i]);
let power
= parseInt(powStr);
let a = "" ;
let b = "" ;
// Converting the value
// to the string
let str1, str2;
// For ax^n, we find (n)*a*x^(n-1)
coeff = coeff * power;
str1 = coeff;
a = str1;
power--;
str2 = power;
b = str2;
S += a + "X^" + b;
return S;
} // Function to differentiate the // given polynomial function diffstr( poly)
{ // We use istringstream to get
// the input in tokens
let is = poly.split( " " );
let pTerm = "" , S = "" ;
// For every token, compute the
// differentiation
for (pTerm of is)
{
// 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 let str = "5x^4 + 6x^2 + 5x^2" ;
console.log(diffstr(str)); // This code is contributed by phasing17 |
Output:
20X^3 + 12X^1 + 10X^1