Related Articles

Related Articles

Sum of all subsequences of a number
  • Difficulty Level : Easy
  • Last Updated : 10 Jan, 2019

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 

Approach : Using power set, we can find all the subsequences and sum up all the subsequences individually in a different function. The total number of subsequences possible are 2n-1. Add the sum of all subsequences to the combined sum which is the final output.

Below is the implementation of above approach.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to find the sum of
// elements present in all subsequences
#include <bits/stdc++.h>
using namespace std;
  
// Returns numeric value of a subsequence of
// s. The subsequence to be picked is decided
// using bit pattern of num (We pick all those
// digits for which there is a set bit in num)
int findSubSequence(string s, int num)
{  
    // Initialize the result
    int res = 0;
  
    // till n!=0
    int i = 0;
    while (num) {
          
        // if i-th bit is set 
        // then add this number
        if (num & 1)
            res += s[i] - '0';
        i++;
          
        // right shift i
        num = num >> 1;
    }
  
    return res;
}
  
// function to find combined sum
// of all individual subsequence sum
int combinedSum(string s)
{
    // length of string
    int n = s.length();
      
    // stores the combined
    int c_sum = 0;
  
    // 2^n-1 subsequences
    int range = (1 << n) - 1;
  
    // loop for all subsequences
    for (int i = 0; i <= range; i++)
        c_sum += findSubSequence(s, i);
  
    // returns the combined sum
    return c_sum;
}
  
// driver code
int main()
{
    string s = "123";
    cout << combinedSum(s);    
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to find the sum of elements
// present in all subsequences
import java.io.*;
  
class GFG {
      
    // Returns numeric value of a 
    // subsequence of s. The subsequence
    // to be picked is decided using bit
    // pattern of num (We pick all those
    // digits for which there is a set 
    // bit in num)
    static int findSubSequence(String s, 
                                int num)
    
        // Initialize the result
        int res = 0;
      
        // till n!=0
        int i = 0;
        while (num > 0) {
              
            // if i-th bit is set 
            // then add this number
            if ((num & 1) == 1)
                res += s.charAt(i) - '0';
            i++;
              
            // right shift i
            num = num >> 1;
        }
      
        return res;
    }
  
    // function to find combined sum
    // of all individual subsequence
    // sum
    static int combinedSum(String s)
    {
          
        // length of String
        int n = s.length();
          
        // stores the combined
        int c_sum = 0;
      
        // 2^n-1 subsequences
        int range = (1 << n) - 1;
      
        // loop for all subsequences
        for (int i = 0; i <= range; i++)
            c_sum += findSubSequence(s, i);
      
        // returns the combined sum
        return c_sum;
    }
  
    // Driver function
    public static void main (String[] args) {
      
        String s = "123";
        System.out.println(combinedSum(s));
    }
  
}
  
// This code is contributed by Anuj_ 67

chevron_right


Python 3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python 3 program to find the sum of
# elements present in all subsequences
   
# Returns numeric value of a subsequence of
# s. The subsequence to be picked is decided
# using bit pattern of num (We pick all those
# digits for which there is a set bit in num)
def findSubSequence(s, num):
  
    # Initialize the result
    res = 0
   
    # till n!=0
    i = 0
    while (num) :
           
        # if i-th bit is set 
        # then add this number
        if (num & 1):
            res += ord(s[i]) - ord('0')
        i+=1
           
        # right shift i
        num = num >> 1
   
    return res
   
# function to find combined sum
# of all individual subsequence sum
def combinedSum(s):
  
    # length of string
    n = len(s)
       
    # stores the combined
    c_sum = 0
   
    # 2^n-1 subsequences
    ran = (1 << n) - 1
   
    # loop for all subsequences
    for i in range( ran+1):
        c_sum += findSubSequence(s, i)
   
    # returns the combined sum
    return c_sum
   
# driver code
if __name__ == "__main__":
      
    s = "123"
    print(combinedSum(s))

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to find the sum of elements
// present in all subsequences
using System;
  
class GFG {
      
    // Returns numeric value of a 
    // subsequence of s. The subsequence
    // to be picked is decided using bit
    // pattern of num (We pick all those
    // digits for which there is a set 
    // bit in num)
    static int findSubSequence(string s, 
                                 int num)
    
        // Initialize the result
        int res = 0;
      
        // till n!=0
        int i = 0;
        while (num > 0) {
              
            // if i-th bit is set 
            // then add this number
            if ((num & 1) == 1)
                res += s[i] - '0';
            i++;
              
            // right shift i
            num = num >> 1;
        }
      
        return res;
    }
  
    // function to find combined sum
    // of all individual subsequence
    // sum
    static int combinedSum(string s)
    {
          
        // length of string
        int n = s.Length;
          
        // stores the combined
        int c_sum = 0;
      
        // 2^n-1 subsequences
        int range = (1 << n) - 1;
      
        // loop for all subsequences
        for (int i = 0; i <= range; i++)
            c_sum += findSubSequence(s, i);
      
        // returns the combined sum
        return c_sum;
    }
  
    // Driver function
    public static void Main()
    {
        string s = "123";
        Console.Write(combinedSum(s));
    }
  
}
  
// This code is contributed by Sam007

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to find the sum of
// elements present in all subsequences
  
// Returns numeric value of a subsequence of
// s. The subsequence to be picked is decided
// using bit pattern of num (We pick all those
// digits for which there is a set bit in num)
function findSubSequence($s, $num)
      
    // Initialize the result
    $res = 0;
  
    // till n!=0
    $i = 0;
    while ($num) {
          
        // if i-th bit is set 
        // then add this number
        if ($num & 1)
            $res += $s[$i] - '0';
        $i++;
          
        // right shintift i
        $num = $num >> 1;
    }
  
    return $res;
}
  
// function to find combined sum
// of all individual subsequence sum
function combinedSum(string $s)
{
      
    // length of string
    $n = strlen($s);
      
    // stores the combined
    $c_sum = 0;
  
    // 2^n-1 subsequences
    $range = (1 << $n) - 1;
  
    // loop for all subsequences
    for ($i = 0; $i <= $range; $i++)
        $c_sum += findSubSequence($s, $i);
  
    // returns the combined sum
    return $c_sum;
}
  
    // Driver Code
    $s = "123";
    echo combinedSum($s); 
      
// This code is contributed by Anuj_67
?>

chevron_right



Output:

24 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.




My Personal Notes arrow_drop_up
Recommended Articles
Page :