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++ 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 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));
}
}
# 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# 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 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
?>
<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.