Calculate maximum value using ‘+’ or ‘*’ sign between two numbers in a string
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.