Skip to content
Related Articles
Get the best out of our app
GFG App
Open App
geeksforgeeks
Browser
Continue

Related Articles

Calculate maximum value using ‘+’ or ‘*’ sign between two numbers in a string

Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article

Given a string of numbers, the task is to find the maximum value from the string, you can add a ‘+’ or ‘*’ sign between any two numbers.

Examples: 

Input : 01231
Output : 
((((0 + 1) + 2) * 3) + 1) = 10
In above manner, we get the maximum value i.e. 10

Input : 891
Output :73
As 8*9*1 = 72 and 8*9+1 = 73.So, 73 is maximum.

Asked in : Facebook

The task is pretty simple as we can get the maximum value on multiplying all values but the point is to handle the case of 0 and 1 i.e. On multiplying with 0 and 1 we get the lower value as compared to on adding with 0 and 1. 

So, use ‘*’ sign between any two numbers(except numbers containing 0 and 1) and use ‘+’ if any of the numbers is 0 and 1.

Implementation:

C++




// C++ program to find maximum value
#include <bits/stdc++.h>
 
using namespace std;
 
// Function to calculate the value
int calcMaxValue(string str)
{
    // Store first character as integer
    // in result
    int res = str[0] -'0';
 
    // Start traversing the string
    for (int i = 1; i < str.length(); i++)
    {
        // Check if any of the two numbers
        // is 0 or 1, If yes then add current
        // element
        if (str[i] == '0' || str[i] == '1' ||
            res < 2 )
            res += (str[i]-'0');
 
        // Else multiply
        else
            res *= (str[i]-'0');
    }
 
    // Return maximum value
    return res;
}
 
// Drivers code
int main()
{
    string str = "01891";
    cout << calcMaxValue(str);
    return 0;
}


Java




// Java program to find maximum value
 
public class GFG
{
    // Method to calculate the value
    static int calcMaxValue(String str)
    {
        // Store first character as integer
        // in result
        int res = str.charAt(0) -'0';
      
        // Start traversing the string
        for (int i = 1; i < str.length(); i++)
        {
            // Check if any of the two numbers
            // is 0 or 1, If yes then add current
            // element
            if (str.charAt(i) == '0' || str.charAt(i) == '1' ||
                res < 2 )
                res += (str.charAt(i)-'0');
      
            // Else multiply
            else
                res *= (str.charAt(i)-'0');
        }
      
        // Return maximum value
        return res;
    }
     
    // Driver Method
    public static void main(String[] args)
    {
        String str = "01891";
        System.out.println(calcMaxValue(str));
    }
}


Python3




# Python program to find maximum value
 
# Function to calculate the value
def calcMaxValue(str):
 
    # Store first character as integer
    # in result
    res = ord(str[0]) - 48
 
    # Start traversing the string
    for i in range(1, len(str)):
         
        # Check if any of the two numbers
        # is 0 or 1, If yes then add current
        # element
        if(str[i] == '0' or
           str[i] == '1' or res < 2):
            res += ord(str[i]) - 48
        else:
            res *= ord(str[i]) - 48
 
    return res        
 
# Driver code
if __name__== "__main__":
    str = "01891";
    print(calcMaxValue(str));
     
# This code is contributed by Sairahul Jella


C#




//C# program to find maximum value
using System;
 
class GFG
{
     
    // Method to calculate the value
    static int calcMaxValue(String str)
    {
        // Store first character as integer
        // in result
        int res = str[0] -'0';
     
        // Start traversing the string
        for (int i = 1; i < str.Length; i++)
        {
            // Check if any of the two numbers
            // is 0 or 1, If yes then add current
            // element
            if (str[i] == '0' ||
                str[i] == '1' || res < 2 )
                res += (str[i] - '0');
     
            // Else multiply
            else
                res *= (str[i] - '0');
        }
     
        // Return maximum value
        return res;
    }
     
    // Driver Code
    static public void Main ()
    {
        String str = "01891";
        Console.Write(calcMaxValue(str));
    }
}
 
// This code is contributed by jit_t


PHP




<?php
// PHP program to find
// maximum value
 
// Function to calculate
// the value
function calcMaxValue($str)
{
    // Store first character
    // as integer in result
    $res = $str[0] - '0';
 
    // Start traversing
    // the string
    for ($i = 1; $i < strlen($str); $i++)
    {
        // Check if any of the
        // two numbers is 0 or
        // 1, If yes then add
        // current element
        if ($str[$i] == '0' || $str[$i] == '1' ||
                           $res < 2  )
            $res += ($str[$i] - '0');
 
        // Else multiply
        else
            $res *= ($str[$i] - '0');
    }
 
    // Return maximum value
    return $res;
}
 
// Driver code
$str = "01891";
echo calcMaxValue($str);
 
// This code is contributed by ajit
?>


Javascript




<script>
 
    // Javascript program to
    // find maximum value
     
    // Method to calculate the value
    function calcMaxValue(str)
    {
        // Store first character as integer
        // in result
        let res = str[0].charCodeAt() -
        '0'.charCodeAt();
       
        // Start traversing the string
        for (let i = 1; i < str.length; i++)
        {
            // Check if any of the two numbers
            // is 0 or 1, If yes then add current
            // element
            if (str[i] == '0' ||
                str[i] == '1' || res < 2 )
                res += (str[i].charCodeAt() -
                '0'.charCodeAt());
       
            // Else multiply
            else
                res *= (str[i].charCodeAt() -
                '0'.charCodeAt());
        }
       
        // Return maximum value
        return res;
    }
     
    let str = "01891";
      document.write(calcMaxValue(str));
     
</script>


Output

82

Time complexity : O(n) 
Auxiliary Space : O(1)

Above program consider the case of small inputs i.e. up to which C/C++ can handle the range of maximum value.

This article is contributed by Sahil Chhabra. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks. 


My Personal Notes arrow_drop_up
Last Updated : 14 Jul, 2022
Like Article
Save Article
Similar Reads
Related Tutorials