ZZULIOJ 1913: 小火山的计算能力(栈模拟)

来源:互联网 发布:sql constraint 编辑:程序博客网 时间:2024/05/11 03:32

Description

别人说小火山的计算能力不行,小火山很生气,于是他想证明自己,现在有一个表达式,他想计算出来。

Input

首先是一个t(1<=20)表示测试组数。然后一个表达式,表达式长度不超过200,只有加法和减法,并且保证第一个字符不会是运算符号,最终结果小于2^63-1。

Output

输出运算结果。

Sample Input

2
1+1
2+1-1
Sample Output

2
2

比赛的时候两种方法都做了,第一次用栈,没做出了,发现可以暴力有该方法了,发现好浪费时间啊,我也总是改一两个地方就提交,这样很容易错,所以也错了好几次,哎,我要改改这毛病了,我要快点才行啊

#include<stdio.h>#include<stack>#include<iostream>#include<string.h>#include<algorithm>#define LL long longconst int N=100005;using namespace std;int main(){    int t,i,j;    scanf("%d",&t);    while(t--)    {        int m;        char str[210];        scanf("%s",str);        int len=strlen(str);        stack<LL>num;        int cnt=0;        int cnt1=0,cnt2=0;        LL sum=0;        j=0;        while(str[j]>='0'&&str[j]<='9')        {            sum=sum*10+str[j]-'0';            j++;        }        num.push(sum);        sum=0;        for(i=j; i<=len-1; i++)        {            if(str[i]>='0'&&str[i]<='9')            {                sum=0;                int point_i=i;                while(str[i]>='0'&&str[i]<='9')                {                    i++;                }                for(j=point_i; j<i; j++)                {                    sum=sum*10+str[j]-'0';                }                num.push(sum);                i--;                if(cnt1==1&&cnt2==0)                {                    LL num1=num.top();                    num.pop();                    LL num2=num.top();                    num.pop();                    num1=num1+num2;                    num.push(num1);                    cnt1=0;                    cnt2=0;                }                else if(cnt2==1&&cnt1==0)                {                    LL num1=num.top();                    num.pop();                    LL num2=num.top();                    num.pop();                    num1=num2-num1;                    num.push(num1);                    cnt2=0;                    cnt1=0;                }            }            else if(str[i]=='+')            {                cnt1=1;                cnt2=0;            }            else if(str[i]=='-')            {                cnt2=1;                cnt1=0;            }        }        printf("%lld\n",num.top());    }    return 0;}
0 0
原创粉丝点击