Sum of all substrings of a string representing a number
Last Updated :
23 May, 2025
Given an integer represented as a string, we need to get the sum of all possible substrings of this string.
Note: It is guaranteed that sum of all substring will fit within a 32-bit integer.
Examples:
Input: s = "6759"
Output: 8421
Explanation: sum = 6 + 7 + 5 + 9 + 67 + 75 +
59 + 675 + 759 + 6759
= 8421
Input: s = "16"
Output: 23
Explanation: sum = 1 + 6 + 16 = 23
Input: s = “421”
Output: 491
Explanation: Sum = 4 + 2 + 1 + 42 + 21 + 421 = 491
[Naive Approach] Using Nested Loop - O(n^2) Time and O(1) Space
Generates every possible substring of the numeric string and treats each substring as a number (not just as characters). Then it adds the value of each such number to a running total.
C++
#include <iostream>
using namespace std;
// Function to calculate the sum of all substrings of a numeric string
int sumSubstrings(string &s) {
// Final answer to store the sum of all substrings
int ans = 0;
// Length of the input string
int n = s.size();
// Iterate through each starting index of substring
for (int i = 0; i < n; i++) {
// Temporary variable to hold current substring value
int temp = 0;
// Generate all substrings starting from index i
for (int j = i; j < n; j++) {
// Shift the previous value by one digit to the left
temp *= 10;
// Add current digit to form the number
temp += (s[j] - '0');
// Add the current substring number to the answer
ans += temp;
}
}
return ans;
}
// Driver code to test the function
int main() {
string s = "6759";
// Output the sum of all substrings
cout << sumSubstrings(s) << endl;
return 0;
}
Java
class GfG{
// Function to calculate the sum of all substrings of a numeric string
static int sumSubstrings(String s) {
// Final answer to store the sum of all substrings
int ans = 0;
// Length of the input string
int n = s.length();
// Iterate through each starting index of substring
for (int i = 0; i < n; i++) {
// Temporary variable to hold current substring value
int temp = 0;
// Generate all substrings starting from index i
for (int j = i; j < n; j++) {
// Shift the previous value by one digit to the left
temp *= 10;
// Add current digit to form the number
temp += (s.charAt(j) - '0');
// Add the current substring number to the answer
ans += temp;
}
}
// Return the final result
return ans;
}
// Main method to test the function
public static void main(String[] args) {
// Input numeric string
String s = "6759";
// Output the sum of all substrings
System.out.println(sumSubstrings(s));
}
}
Python
def sumSubstrings(s):
# Final answer to store the sum of all substrings
ans = 0
# Length of the input string
n = len(s)
for i in range(n):
# Temporary variable to hold current substring value
temp = 0
for j in range(i, n):
# Shift the previous value by one digit to the left
temp *= 10
# Add current digit to form the number
temp += int(s[j])
# Add the current substring number to the answer
ans += temp
return ans
if __name__ == "__main__":
s = "6759"
# Output the sum of all substrings
print(sumSubstrings(s))
C#
using System;
class GfG{
// Function to calculate the sum of all substrings of a numeric string
static int sumSubstrings(string s){
// Final answer to store the sum of all substrings
int ans = 0;
// Length of the input string
int n = s.Length;
// Iterate through each starting index of substring
for (int i = 0; i < n; i++){
// Temporary variable to hold current substring value
int temp = 0;
// Generate all substrings starting from index i
for (int j = i; j < n; j++){
// Shift the previous value by one digit to the left
temp *= 10;
// Add current digit to form the number
temp += (s[j] - '0');
// Add the current substring number to the answer
ans += temp;
}
}
// Return the final result
return ans;
}
// Main method to test the function
public static void Main(){
// Input numeric string
string s = "6759";
// Output the sum of all substrings
Console.WriteLine(sumSubstrings(s));
}
}
JavaScript
function sumSubstrings(s) {
// Final answer to store the sum of all substrings
let ans = 0;
// Length of the input string
let n = s.length;
for (let i = 0; i < n; i++) {
// Temporary variable to hold current substring value
let temp = 0;
for (let j = i; j < n; j++) {
// Shift the previous value by one digit to the left
temp *= 10;
// Add current digit to form the number
temp += (s[j] - '0');
// Add the current substring number to the answer
ans += temp;
}
}
return ans;
}
// Driver code to test the function
let s = "6759";
// Output the sum of all substrings
console.log(sumSubstrings(s));
[Better Approach] Using Dynamic Programming - O(n) Time and O(n) Space
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: s = "6759"
sumofdigit[0] = 6 = 6
sumofdigit[1] = 7 + 67 = 74
sumofdigit[2] = 5 + 75 + 675 = 755
sumofdigit[3] = 9 + 59 + 759 + 6759 = 7586
Result = 8421
Now 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] = 9 + 59 + 759 + 6759
= 9 + 50 + 9 + 750 + 9 + 6750 + 9
= 9*4 + 10*(5 + 75 + 675)
= 9*4 + 10*(sumofdigit[2])
In general, sumofdigit[i] = (i+1)*s[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(s[i]) + 10 * sumOfDigit[i-1]
- Add the value of sumOfDigit[i] to result
- Return result
C++
// C++ program to print sum of all substring of
// a sber 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 s
int sumSubstrings(string s){
int n = s.length();
// allocate memory equal to length of string
int sumofdigit[n];
// initialize first value with first digit
sumofdigit[0] = toDigit(s[0]);
int res = sumofdigit[0];
// loop over all digits of string
for (int i = 1; i < n; i++) {
int si = toDigit(s[i]);
// update each sumofdigit from previous value
sumofdigit[i]
= (i + 1) * si + 10 * sumofdigit[i - 1];
// add current value to the result
res += sumofdigit[i];
}
return res;
}
// Driver code
int main(){
string s = "6759";
// Function call
cout << sumSubstrings(s) << endl;
return 0;
}
Java
// Java program to print sum of all substring of
// a sber represented as a string
import java.util.Arrays;
class GfG {
// Returns sum of all substring of s
static int sumSubstrings(String s){
int n = s.length();
// allocate memory equal to length of string
int sumofdigit[] = new int[n];
// initialize first value with first digit
sumofdigit[0] = s.charAt(0) - '0';
int res = sumofdigit[0];
// loop over all digits of string
for (int i = 1; i < n; i++) {
int si = s.charAt(i) - '0';
// update each sumofdigit from previous value
sumofdigit[i]
= (i + 1) * si + 10 * sumofdigit[i - 1];
// add current value to the result
res += sumofdigit[i];
}
return res;
}
// Driver Code
public static void main(String[] args){
String s = "6759";
// Function call
System.out.println(sumSubstrings(s));
}
}
Python
# Python3 program to print
# sum of all substring of
# a sber represented as
# a string
def sumSubstrings(s):
n = len(s)
# allocate memory equal
# to length of string
sumofdigit = []
# initialize first value
# with first digit
sumofdigit.append(int(s[0]))
res = sumofdigit[0]
# loop over all
# digits of string
for i in range(1, n):
si = int(s[i])
# update each sumofdigit
# from previous value
sumofdigit.append((i + 1) *
si + 10 * sumofdigit[i - 1])
# add current value
# to the result
res += sumofdigit[i]
return res
# Driver Code
if __name__ == '__main__':
s = "6759"
print(sumSubstrings(s))
C#
// C# program to print sum of
// all substring of a sber
// represented as a string
using System;
class GfG {
// Returns sum of all
// substring of s
static int sumSubstrings(String s){
int n = s.Length;
// allocate memory equal to
// length of string
int[] sumofdigit = new int[n];
// initialize first value
// with first digit
sumofdigit[0] = s[0] - '0';
int res = sumofdigit[0];
// loop over all digits
// of string
for (int i = 1; i < n; i++) {
int si = s[i] - '0';
// update each sumofdigit
// from previous value
sumofdigit[i]
= (i + 1) * si + 10 * sumofdigit[i - 1];
// add current value
// to the result
res += sumofdigit[i];
}
return res;
}
// Driver code
public static void Main(){
String s = "6759";
// Function call
Console.Write(sumSubstrings(s));
}
}
JavaScript
// Returns sum of all
// substring of s
function sumSubstrings(s){
let n = s.length;
// allocate memory equal to
// length of string
let sumofdigit = new Array(n);
// initialize first value
// with first digit
sumofdigit[0] = s[0].charCodeAt() - "0".charCodeAt();
let res = sumofdigit[0];
// loop over all digits
// of string
for (let i = 1; i < n; i++) {
let si = s[i].charCodeAt() - "0".charCodeAt();
// update each sumofdigit
// from previous value
sumofdigit[i]
= (i + 1) * si + 10 * sumofdigit[i - 1];
// add current value
// to the result
res += sumofdigit[i];
}
return res;
}
// Driver Code
let s = "6759";
console.log(sumSubstrings(s));
[Expected Approach] Within Constant Space - O(n) Time and O(n) Space
After analyse each digit contributes to the sum of all substrings by observing its position and place value.
Let number be s = "6759".
1 10 100 1000
6 1 1 1 1
7 2 2 2
5 3 3
9 4
The above table indicates that, when all the substrings are converted further to the ones, tens, hundreds etc.. form, each index of the string will have some fixed occurrence. The 0'th index will have 1 occurrence each of ones, tens etc. The 1st will have 2, 2nd will have 3 and so on. Each digit at index i
appears in exactly (i + 1)
substrings ending at that digit. Additionally, its contribution is scaled by powers of 10 based on its position from the right.
So the total sum of all substrings can be expressed by evaluating how each digit contributes based on its position. For the string s = "6759"
, the sum becomes:
sum = 6*(1*1 + 1*10 + 1*100 + 1*1000) + 7*(2*1 + 2*10 + 2*100) +
5*(3*1 + 3*10) + 9*(4*1)
= 6*1*(1111) + 7*2*(111) + 5*3*(11) + 9*4*(1)
= 6666 + 1554 + 165 + 36
= 8421
Now, to handle the multiplication we will be having a multiplying factor which starts from 1. It's clear from the example that the multiplying factor(in reverse) is 1, 11, 111, ... and so on. So the multiplication will be based on three factors. number, its index, and a multiplying factor.
C++
// C++ program to print sum of all substring of
// a sber represented as a string
#include <bits/stdc++.h>
using namespace std;
// Returns sum of all substring of s
int sumSubstrings(string s){
long long int sum = 0;
// Here traversing the array in reverse
// order.Initializing loop from last element.
// mf is multiplying factor.
long long int mf = 1;
for (int i=s.size()-1; i>=0; i--){
// Each time sum is added to its previous
// sum. Multiplying the three factors as explained above.
// s[i]-'0' is done to convert char to int.
sum += (s[i]-'0')*(i+1)*mf;
// Making new multiplying factor as explained above.
mf = mf*10 + 1;
}
return sum;
}
// Driver code
int main(){
string s = "6759";
cout << sumSubstrings(s) << endl;
return 0;
}
Java
// Java program to print sum of all substring of
// a sber represented as a string
import java.util.Arrays;
class GfG {
// Returns sum of all substring of s
static int sumSubstrings(String s){
// Initialize result
int sum = 0;
// Here traversing the array in reverse
// order.Initializing loop from last
// element.
// mf is multiplying factor.
int mf = 1;
for (int i = s.length() - 1; i >= 0; i --){
// Each time sum is added to its previous
// sum. Multiplying the three factors as
// explained above.
// s[i]-'0' is done to convert char to int.
sum += (s.charAt(i) - '0') * (i + 1) * mf;
// Making new multiplying factor as
// explained above.
mf = mf * 10 + 1;
}
return sum;
}
// Driver Code
public static void main(String[] args){
String s = "6759";
System.out.println(sumSubstrings(s));
}
}
Python
# Python3 program to print sum of all substring of
# a stdber represented as a string
# Returns sum of all substring of std
def sumSubstrings(s):
# Initialize result
sum = 0
# Here traversing the array in reverse
# order.Initializing loop from last
# element.
# mf is multiplying factor.
mf = 1
for i in range(len(s) - 1, -1, -1):
# Each time sum is added to its previous
# sum. Multiplying the three factors as
# explained above.
# int(s[i]) is done to convert char to int.
sum = sum + (int(s[i])) * (i + 1) * mf
# Making new multiplying factor as
# explained above.
mf = mf * 10 + 1
return sum
# Driver Code
if __name__=='__main__':
s = "6759"
print(sumSubstrings(s))
C#
// C# program to print sum of all substring of
// a sber represented as a string
using System;
class GfG {
// Returns sum of all substring of s
static int sumSubstrings(string s){
int sum = 0;
// Here traversing the array in reverse
// order.Initializing loop from last
// element.
// mf is multiplying factor.
int mf = 1;
for (int i = s.Length - 1; i >= 0; i --){
// Each time sum is added to its previous
// sum. Multiplying the three factors as
// explained above.
// s[i]-'0' is done to convert char to int.
sum += (s[i] - '0') * (i + 1) * mf;
// Making new multiplying factor as
// explained above.
mf = mf * 10 + 1;
}
return sum;
}
// Driver Code
public static void Main() {
string s = "6759";
Console.WriteLine(sumSubstrings(s));
}
}
JavaScript
// Function returns sum of all substring of s
function sumSubstrings(s){
let sum = 0;
// Here traversing the array in reverse
// order.Initializing loop from last
// element.
// mf is multiplying factor.
let mf = 1;
for (let i = s.length - 1; i >= 0; i--) {
// Each time sum is added to its previous
// sum. Multiplying the three factors as
// explained above.
// s[i]-'0' is done to convert char to int.
sum += (s[i].charCodeAt() - "0".charCodeAt())
* (i + 1) * mf;
// Making new multiplying factor as
// explained above.
mf = mf * 10 + 1;
}
return sum;
}
// Driver Code
let s = "6759";
console.log(sumSubstrings(s));
Similar Reads
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.Note: It is guaranteed that sum of all substring will fit within a 32-bit integer.Examples: Input: s = "6759"Output: 8421Explanation: sum = 6 + 7 + 5 + 9 + 67 + 75 + 59 + 675 + 759 + 6759 = 842
14 min read
Sum of all substrings of a string representing a number | Set 2 (Constant Extra Space) Given a string representing a number, we need to get the sum of all possible sub strings of this string.Examples : Input: s = "6759"Output: 8421Explanation: sum = 6 + 7 + 5 + 9 + 67 + 75 + 59 + 675 + 759 + 6759 = 8421Input: s = "16"Output: 23Explanation: sum = 1 + 6 + 16 = 23ApproachThe main idea is
6 min read
Number of substrings of a string Find total number of non-empty substrings of a string with N characters. Input : str = "abc" Output : 6 Every substring of the given string : "a", "b", "c", "ab", "bc", "abc" Input : str = "abcd" Output : 10 Every substring of the given string : "a", "b", "c", "d", "ab", "bc", "cd", "abc", "bcd" and
3 min read
Calculate sum of all numbers present in a string Given a string S containing alphanumeric characters, The task is to calculate the sum of all numbers present in the string. Examples: Input: 1abc23Output: 24Explanation: 1 + 23 = 24 Input: geeks4geeksOutput: 4 Input: 1abc2x30yz67Output: 100 Recommended PracticeSum of numbers in stringTry It!Approach
13 min read
Number of even substrings in a string of digits Given a string of digits 0 - 9. The task is to count a number of substrings which when converting into integer form an even number. Examples : Input : str = "1234".Output : 6"2", "4", "12", "34", "234", "1234" are 6 substring which are even.Input : str = "154".Output : 3Input : str = "15".Output : 0
9 min read
Sum of all prefixes of given numeric string Given string str having N characters representing an integer, the task is to calculate the sum of all possible prefixes of the given string. Example: Input: str = "1225"Output: 1360Explanation: The prefixes of the given string are 1, 12, 122, and 1225 and their sum will be 1 + 12 + 122 + 1225 = 1360
8 min read
XOR of all substrings of a given Binary String Given a binary string str of size N, the task is to calculate the bitwise XOR of all substrings of str. Examples: Input: str = "11"Output: 11Explanation: The substrings of "11" are: 1, 1, and 11.Their XOR = 1 â 1 â 11 = 11 Input: str = "110"Output: 111Explanation: The substrings of 110 are: 1, 1, 0,
6 min read
Number of substrings with odd decimal value in a binary string Given a binary string containing only 0's and 1's. Write a program to find number of sub-strings of this string whose decimal representation is odd. Examples : Input : 101 Output : 3 Explanation : Substrings with odd decimal representation are: {1, 1, 101} Input : 1101 Output : 6 Explanation : Subst
6 min read
Sum of all subsequences of a number Given a number as string s, find the sum of all the elements present in all possible subsequences of s.Examples : Input : s = "123" Output : 24 Explanation : all possible sub-sequences are 1, 2, 3, {1, 2}, {2, 3}, {1, 3}, {1, 2, 3} which add up to 24 Input : s = "453" Output : 48 Recommended Practic
14 min read
Min Length String with All Substrings of Size N Given two integers n and k, your task is to find a string of minimum length to contain all possible strings of size n as a substring. The characters of the string should be integers ranging from 0 to k - 1. Examples:Input: n = 2, k = 2Output: 00110Explanation: Allowed characters are from 0 to k-1 (i
7 min read