Given a numeric string str of length N, the task is to find the sum of all possible expressions by inserting the ‘+’ operator between the characters of the string any number of times.
Examples:
Input: str = “125” Output: 176 Explanation: Inserting “+” after 1st index modifies str to “1+25” and value = 26 Inserting “+” after 2nd index modifies str to “12+5” and value = 17 Inserting “+” after both 1st and 2nd index modifies str to “1+2+5” and value = 8 Therefore, the total sum of all possible expression is 125 + 26 + 17 + 8 = 176
Input: str = “9999999999”
Output: 12656242944
Approach: The idea is to insert the ‘+’ operator at all possible index of the string in all possible ways and calculate the sum. Finally, print the total sum obtained. Follow the steps below to solve the problem:
- Initialize a variable say, sumOfExp to store the sum of all possible expression by inserting the ‘+’ operator at all possible indices of the string.
- Generate all possible subset of indices of the string iteratively. For every subset of indices inserts the ‘+’ operator at elements of the subset and increment sumOfExp by the sum of the current expression.
- Finally, print the value of sumOfExp.
Below is the implementation of the above approach:
// C++ program to implement // the above approach #include <bits/stdc++.h> using namespace std;
// Function to find sum of all expressions by // inserting '+' operator at all possible indices void findSumOfExpressions(string S, int N)
{ // Stores sum of all expressions by inserting
// '+' operator at all possible indices
unsigned long long sumOfExp = 0;
// Generate all possible subset
// of indices iteratively
for ( int i = 0; i < pow (2, N - 1); i++) {
// Stores sum of
// current expressions
unsigned long long ans_sub = 0;
// Stores numbers of
// current expressions
string subst = string(1, S.at(0));
// Traverse the string at insert + at
// current subset of indices
for ( int j = 0; j < N - 1; j++) {
// If current index exists
// in the current subset
if (((i >> j) & 1) == 1) {
// Update ans_sub
ans_sub += stoull(subst);
// Update subset
subst = string(1, S.at(j + 1));
}
else
// Update subset
subst += S.at(j + 1);
// + can't be inserted after
// the last index
if (j == N - 2)
ans_sub += stoull(subst);
}
// Update ans
sumOfExp += ans_sub;
}
// Base case
if (N == 1)
cout << S;
else
// Print answer
cout << sumOfExp;
} // Driver Code int main()
{ // Given string
string S = "9999999999" ;
// Length of the string
int N = S.length();
// Function call
findSumOfExpressions(S, N);
} // This code is contributed by phasing17. |
import java.util.List;
import java.util.ArrayList;
class Main
{ // Function to find sum of all expressions by
// inserting '+' operator at all possible indices
static void findSumOfExpressions(String S, int N)
{
// Stores sum of all expressions by inserting
// '+' operator at all possible indices
long sumOfExp = 0 ;
// Generate all possible subset
// of indices iteratively
for ( int i = 0 ; i < Math.pow( 2 , N - 1 ); i++) {
// Stores sum of
// current expressions
long ans_sub = 0 ;
// Stores numbers of
// current expressions
String subst = "" + S.charAt( 0 );
// Traverse the string at insert + at
// current subset of indices
for ( int j = 0 ; j < N - 1 ; j++) {
// If current index exists
// in the current subset
if (((i >> j) & 1 ) == 1 ) {
// Update ans_sub
ans_sub += Long.parseLong(subst);
// Update subset
subst = "" + S.charAt(j + 1 );
}
else
// Update subset
subst += S.charAt(j + 1 );
// + can't be inserted after
// the last index
if (j == N - 2 )
ans_sub += Long.parseLong(subst);
}
// Update ans
sumOfExp += ans_sub;
}
// Base case
if (N == 1 )
System.out.println(S);
else
// Print answer
System.out.println(sumOfExp);
}
// Driver Code
public static void main(String[] args)
{
// Given string
String S = "9999999999" ;
// Length of the string
int N = S.length();
// Function call
findSumOfExpressions(S, N);
}
} // This code is contributed by phasing17. |
# Python program to implement # the above approach # Function to find sum of all expressions by # inserting '+' operator at all possible indices def findSumOfExpressions(S, N):
# Stores sum of all expressions by inserting
# '+' operator at all possible indices
sumOfExp = 0
# Generate all possible subset
# of indices iteratively
for i in range ( 2 * * (N - 1 )):
# Stores sum of
# current expressions
ans_sub = 0
# Stores numbers of
# current expressions
subst = S[ 0 ]
# Traverse the string at insert + at
# current subset of indices
for j in range (N - 1 ):
# If current index exists
# in the current subset
if (i >> j) & 1 :
# Update ans_sub
ans_sub + = int (subst)
# Update subset
subst = S[j + 1 ]
else :
# Update subset
subst + = S[j + 1 ]
# + can't be inserted after
# the last index
if j = = N - 2 :
ans_sub + = int (subst)
# Update ans
sumOfExp + = ans_sub
# Base case
if N = = 1 :
print ( int (S))
else :
# Print answer
print (sumOfExp)
# Driver Code if __name__ = = '__main__' :
# Given string
S = "9999999999"
# Length of the string
N = len (S)
# Function call
findSumOfExpressions(S, N)
|
// C# program to implement // the above approach using System;
using System.Collections.Generic;
class GFG
{ // Function to find sum of all expressions by
// inserting '+' operator at all possible indices
static void findSumOfExpressions( string S, int N)
{
// Stores sum of all expressions by inserting
// '+' operator at all possible indices
ulong sumOfExp = 0;
// Generate all possible subset
// of indices iteratively
for ( int i = 0; i < Math.Pow(2, N - 1); i++) {
// Stores sum of
// current expressions
ulong ans_sub = 0;
// Stores numbers of
// current expressions
string subst = "" + S[0];
// Traverse the string at insert + at
// current subset of indices
for ( int j = 0; j < N - 1; j++) {
// If current index exists
// in the current subset
if (((i >> j) & 1) == 1) {
// Update ans_sub
ans_sub += Convert.ToUInt64(subst);
// Update subset
subst = "" + S[j + 1];
}
else
// Update subset
subst += S[j + 1];
// + can't be inserted after
// the last index
if (j == N - 2)
ans_sub += Convert.ToUInt64(subst);
}
// Update ans
sumOfExp += ans_sub;
}
// Base case
if (N == 1)
Console.WriteLine(S);
else
// Print answer
Console.WriteLine(sumOfExp);
}
// Driver Code
public static void Main( string [] args)
{
// Given string
string S = "9999999999" ;
// Length of the string
int N = S.Length;
// Function call
findSumOfExpressions(S, N);
}
} // This code is contributed by phasing17. |
// JavaScript program to implement // the above approach // Function to find sum of all expressions by // inserting '+' operator at all possible indices function findSumOfExpressions(S, N)
{ // Stores sum of all expressions by inserting
// '+' operator at all possible indices
let sumOfExp = 0
// Generate all possible subset
// of indices iteratively
for ( var i = 0; i < 2 ** (N - 1); i++)
{
// Stores sum of
// current expressions
let ans_sub = 0
// Stores numbers of
// current expressions
let subst = S[0]
// Traverse the string at insert + at
// current subset of indices
for ( var j = 0; j < N - 1; j++)
{
// If current index exists
// in the current subset
if (((i >> j) & 1) == 1)
{
// Update ans_sub
ans_sub += parseInt(subst)
// Update subset
subst = S[j + 1]
}
else
// Update subset
subst += S[j + 1]
// + can't be inserted after
// the last index
if (j == N - 2)
ans_sub += parseInt(subst)
}
// Update ans
sumOfExp += ans_sub
}
// Base case
if (N == 1)
console.log(parseInt(S))
else
// Print answer
console.log(sumOfExp)
} // Driver Code // Given string let S = "9999999999"
// Length of the string let N = S.length // Function call findSumOfExpressions(S, N) // This code is contributed by phasing17. |
12656242944
Time Complexity: O(2N * N)
Auxiliary Space: O(1)