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

1.8

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 number is 0 and 1.

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' ||
            str[i-1] == '0' || str[i-1] == '1' )
            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 
{
	// Mehod 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' ||
	            str.charAt(i-1) == '0' || str.charAt(i-1) == '1' )
	            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));
	}
}


Output:

82

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

Reference :
https://www.careercup.com/question?id=5745795300065280

This article is contributed by Sahil Chhabra. 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 write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

GATE CS Corner    Company Wise Coding Practice

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

Recommended Posts:



1.8 Average Difficulty : 1.8/5.0
Based on 10 vote(s)










Writing code in comment? Please use ide.geeksforgeeks.org, generate link and share the link here.