10700 - Camel trading
Background:
Aroud 800 A.D., El Mamum, Calif of Baghdad was presented the formula 1+2*3*4+5, which had its origin in the financial accounts of a camel transaction. The formula lacked parenthesis and was ambiguous. So, he decided to ask savants to provide him with a method to find which interpretation is the most advantageous for him, depending on whether is is buying or selling the camels.
The Problem :
You are commissioned by El Mamum to write a program that determines the maximum and minimum possible interpretation of a parenthesis-less expression.
Input:
The input consists of an integer N, followed by N lines, each containing an expression. Each expression is composed of at most 12 numbers, each ranging between 1 and 20, and separated by the sum and product operators + and *.
OutPut:
For each given expression, the output will echo a line with the corresponding maximal and minimal interpretations, following the format given in the sample output.
Simple Input :
3 1+2*3*4+5 4*18+14+7*10 3+11+4*1*13*12*8+3*3+8
Simple Output:
The maximum and minimum are 81 and 30. The maximum and minimum are 1560 and 156. The maximum and minimum are 339768 and 5023.
#include <iostream> #include<cstdio> #include<cstring> #include<cctype> using namespace std; char b[1000]; double stack[10000]; int main() { int i,k,t,head,top; double d,min,max,temp; char flag; scanf("%d",&t); while(t--) { scanf("%s",b); k=strlen(b); head=top=0; min=0.0; b[k]='+'; for(i=0;i<=k;i++) if(!isdigit(b[i])) { flag=b[i]; b[i]='\0'; sscanf(&b[head],"%lf",&d); b[i]=flag; stack[top++]=d; if(flag=='+') { temp=1.0; while(top) { top--; temp*=stack[top]; } min+=temp; } head=i+1; } temp=0.0; head=0; max=1.0; b[k]='*'; for(i=0;i<=k;i++) if(!isdigit(b[i])) { flag=b[i]; b[i]='\0'; sscanf(&b[head],"%lf",&d); temp+=d; if(flag=='*') { max*=temp; temp=0.0; } head=i+1; } printf("The maximum and minimum are %.0f and %.0f.\n",max,min); } return 0; }