Sum of all substrings of a string representing a number using Dynamic-Programming
To solve the problem follow the below idea:
We can solve this problem by using dynamic programming. We can write a summation of all substrings on basis of the digit at which they are ending in that case,
Sum of all substrings = sumofdigit[0] + sumofdigit[1] + sumofdigit[2] … + sumofdigit[n-1] where n is length of string.
Where sumofdigit[i] stores the sum of all substring ending at ith index digit, in the above example,Example: num = “1234”
sumofdigit[0] = 1 = 1
sumofdigit[1] = 2 + 12 = 14
sumofdigit[2] = 3 + 23 + 123 = 149
sumofdigit[3] = 4 + 34 + 234 + 1234 = 1506
Result = 1670Now we can get the relation between sumofdigit values and can solve the question iteratively. Each sumofdigit can be represented in terms of previous value as shown below, For above example,
sumofdigit[3] = 4 + 34 + 234 + 1234
= 4 + 30 + 4 + 230 + 4 + 1230 + 4
= 4*4 + 10*(3 + 23 +123)
= 4*4 + 10*(sumofdigit[2])In general, sumofdigit[i] = (i+1)*num[i] + 10*sumofdigit[i-1]
Follow the given steps to solve the problem:
- Declare an array of size n to store the sum of previous digits, processed so far, and a variable result
- Traverse over the string and for every character
- Set sumOfDigit[i] = (i + 1) * toDigit(num[i]) + 10 * sumOfDigit[i-1]
- Add the value of sumOfDigit[i] to result
- Return result
Below is the implementation of the above approach:
C++
// C++ program to print sum of all substring of // a number represented as a string #include <bits/stdc++.h> using namespace std; // Utility method to convert character digit to // integer digit int toDigit( char ch) { return (ch - '0' ); } // Returns sum of all substring of num int sumOfSubstrings(string num) { int n = num.length(); // allocate memory equal to length of string int sumofdigit[n]; // initialize first value with first digit sumofdigit[0] = toDigit(num[0]); int res = sumofdigit[0]; // loop over all digits of string for ( int i = 1; i < n; i++) { int numi = toDigit(num[i]); // update each sumofdigit from previous value sumofdigit[i] = (i + 1) * numi + 10 * sumofdigit[i - 1]; // add current value to the result res += sumofdigit[i]; } return res; } // Driver code int main() { string num = "1234" ; // Function call cout << sumOfSubstrings(num) << endl; return 0; } |
Java
// Java program to print sum of all substring of // a number represented as a string import java.util.Arrays; class GFG { // Returns sum of all substring of num public static int sumOfSubstrings(String num) { int n = num.length(); // allocate memory equal to length of string int sumofdigit[] = new int [n]; // initialize first value with first digit sumofdigit[ 0 ] = num.charAt( 0 ) - '0' ; int res = sumofdigit[ 0 ]; // loop over all digits of string for ( int i = 1 ; i < n; i++) { int numi = num.charAt(i) - '0' ; // update each sumofdigit from previous value sumofdigit[i] = (i + 1 ) * numi + 10 * sumofdigit[i - 1 ]; // add current value to the result res += sumofdigit[i]; } return res; } // Driver code public static void main(String[] args) { String num = "1234" ; // Function call System.out.println(sumOfSubstrings(num)); } } // This code is contributed by Arnav Kr. Mandal. |
Python3
# Python3 program to print # sum of all substring of # a number represented as # a string # Returns sum of all # substring of num def sumOfSubstrings(num): n = len (num) # allocate memory equal # to length of string sumofdigit = [] # initialize first value # with first digit sumofdigit.append( int (num[ 0 ])) res = sumofdigit[ 0 ] # loop over all # digits of string for i in range ( 1 , n): numi = int (num[i]) # update each sumofdigit # from previous value sumofdigit.append((i + 1 ) * numi + 10 * sumofdigit[i - 1 ]) # add current value # to the result res + = sumofdigit[i] return res # Driver code if __name__ = = '__main__' : num = "1234" # Function call print (sumOfSubstrings(num)) # This code is contributed # by Sanjit_Prasad |
C#
// C# program to print sum of // all substring of a number // represented as a string using System; class GFG { // Returns sum of all // substring of num public static int sumOfSubstrings(String num) { int n = num.Length; // allocate memory equal to // length of string int [] sumofdigit = new int [n]; // initialize first value // with first digit sumofdigit[0] = num[0] - '0' ; int res = sumofdigit[0]; // loop over all digits // of string for ( int i = 1; i < n; i++) { int numi = num[i] - '0' ; // update each sumofdigit // from previous value sumofdigit[i] = (i + 1) * numi + 10 * sumofdigit[i - 1]; // add current value // to the result res += sumofdigit[i]; } return res; } // Driver code public static void Main() { String num = "1234" ; // Function call Console.Write(sumOfSubstrings(num)); } } // This code is contributed by Nitin Mittal. |
PHP
<?php // PHP program to print sum of all // substring of a number represented // as a string // Method to convert character // digit to integer digit function toDigit( $ch ) { return ( $ch - '0' ); } // Returns sum of all // substring of num function sumOfSubstrings( $num ) { $n = strlen ( $num ); // allocate memory equal to // length of string $sumofdigit [ $n ] = 0; // initialize first value // with first digit $sumofdigit [0] = toDigit( $num [0]); $res = $sumofdigit [0]; // loop over all digits of string for ( $i = 1; $i < $n ; $i ++) { $numi = toDigit( $num [ $i ]); // update each sumofdigit // from previous value $sumofdigit [ $i ] = ( $i + 1) * $numi + 10 * $sumofdigit [ $i - 1]; // add current value to the result $res += $sumofdigit [ $i ]; } return $res ; } // Driver Code $num = "1234" ; // Function call echo sumOfSubstrings( $num ) ; // This code is contributed by nitin mittal. ?> |
Javascript
<script> // Javascript program to print sum of // all substring of a number // represented as a string // Returns sum of all // substring of num function sumOfSubstrings(num) { let n = num.length; // allocate memory equal to // length of string let sumofdigit = new Array(n); // initialize first value // with first digit sumofdigit[0] = num[0].charCodeAt() - '0' .charCodeAt(); let res = sumofdigit[0]; // loop over all digits // of string for (let i = 1; i < n; i++) { let numi = num[i].charCodeAt() - '0' .charCodeAt(); // update each sumofdigit // from previous value sumofdigit[i] = (i + 1) * numi + 10 * sumofdigit[i - 1]; // add current value // to the result res += sumofdigit[i]; } return res; } let num = "1234" ; document.write(sumOfSubstrings(num)); </script> |
1670
Time Complexity: O(N) where N is the length of the input string.
Auxiliary Space: O(N)
Sum of all substrings of a string representing a number | Set 1
Given an integer represented as a string, we need to get the sum of all possible substrings of this string
Examples:
Input: num = “1234”
Output: 1670
Explanation: Sum = 1 + 2 + 3 + 4 + 12 + 23 +34 + 123 + 234 + 1234
= 1670Input: num = “421”
Output: 491
Explanation: Sum = 4 + 2 + 1 + 42 + 21 + 421 = 491
Contact Us