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

    xiaoxiao2023-09-19  3

    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 long const 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; }
    转载请注明原文地址: https://ju.6miu.com/read-1279112.html
    最新回复(0)