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

• Difficulty Level : Easy
• Last Updated : 04 Jan, 2021

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

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

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(2N * N)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up
Recommended Articles
Page :