【题解-信息学奥赛一本通】1356:计算(calc)

发布时间:2026/7/23 4:48:41
【题解-信息学奥赛一本通】1356:计算(calc) 题目1356计算(calc)题目描述小明在你的帮助下破密了Ferrari设的密码门正要往前走突然又出现了一个密码门门上有一个算式其中只有“(”“)”“0-9”“”“-”“*”“/”“^”求出的值就是密码。小明数学学得不好还需你帮他的忙。(“/”用整数除法)输入共1行为一个算式。输出共1行就是密码。时空限制1s / 64MB样例输入1(32)*(7^26*9)/(2)样例输出258代码#includebits/stdc.husingnamespacestd;constintN5010;string s;structnode{intn;charc;}h[N];intsum;intk;inttt;charstk[N];boolf;intstk2[N],tt2;intpri(charx){switch(x){case(:return5;case^:return4;case*:return3;case/:return3;case:return2;case-:return2;case):return1;}}boolisop(charc){if(c||c-||c*||c/||c^||c(||c))returntrue;returnfalse;}intmain(){cins;// 将中缀表达式转为后缀表达式s);ffalse;for(inti0;is.size();i){if(s[i]0s[i]9){sumsum*10(s[i]-0);ftrue;}else{if(f){h[k].nsum;sum0;ffalse;}while(!(tt0||pri(stk[tt])pri(s[i])||stk[tt]()){h[k].cstk[tt];tt--;}if(tt0s[i]))tt--;elsestk[tt]s[i];}}for(inti1;ik;i){if(h[i].c){intbstk2[tt2];tt2--;intastk2[tt2];tt2--;switch(h[i].c){case:stk2[tt2]ab;break;case-:stk2[tt2]a-b;break;case*:stk2[tt2]a*b;break;case/:stk2[tt2]a/b;break;case^:stk2[tt2]pow(a,b);break;}}else{stk2[tt2]h[i].n;}}coutstk2[tt2];return0;}结果