UVaOJ10700 - Camel trading

10700 - Camel trading

Time limit: 3.000 seconds

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值