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 



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 


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Improved By : Sam007, vt_m, chitranayal



Article Tags :
Practice Tags :


Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.