# Sum of all possible expressions of a numeric string possible by inserting addition operators

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:

## Python3

`# 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 subst ` ` ` `subst ` `=` `S[j ` `+` `1` `] ` ` ` `else` `: ` ` ` ` ` `# Update subst ` ` ` `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) ` |

**Output:**

12656242944

**Time Complexity:** O(2^{N} * N)**Auxiliary Space:** O(1)