隐藏页面特效

2178 表达式运算Cuties

2178 表达式运算Cuties

 

 时间限制: 1 s
 空间限制: 32000 KB
 题目等级 : 大师 Master
 
 
 
题目描述 Description

给出一个表达式,其中运算符仅包含+,-,*,/,^要求求出表达式的最终值

数据可能会出现括号情况 还有可能出现多余括号情况

数据保证不会出现>maxlongint的数据

数据可能回出现负数情况

输入描述 Input Description

仅一行,即为表达式

输出描述 Output Description

仅一行,既为表达式算出的结果

样例输入 Sample Input

(2+2)^(1+1)

样例输出 Sample Output

16

数据范围及提示 Data Size & Hint

表达式总长度<=30

分类标签 Tags 点此展开 

 
题解:
字符串表达式运算的模板
AC代码:
#include<cstdio> #include<cstring> using namespace std; const int N=52; char s[N],sym[N]; int i,p,l,cnt,num[N]; bool can(){ if(sym[p]=='^') return 1; if((s[i]=='+'||s[i]=='-')&&sym[p]!='(') return 1; if((s[i]=='*'||s[i]=='/')&&(sym[p]=='*'||sym[p]=='/')) return 1; return 0; } int fpow(int a,int b){ int res=1; for(;b;b>>=1,a=a*a) if(b&1) res=res*a; return res; } void push(){ sym[++p]=s[i]; } void pop(){ switch(sym[p--]){ case '+':num[p]+=num[p+1];break; case '-':num[p]-=num[p+1];break; case '*':num[p]*=num[p+1];break; case '/':num[p]/=num[p+1];break; case '^':num[p]=fpow(num[p],num[p+1]);break; } } int main(){ scanf("%s",s+1); l=strlen(s+1); for(i=1;i<=l;i++){ if(s[i]=='(') cnt++; if(s[i]==')') cnt--; } sym[++p]='('; for(;cnt>=0;cnt--) s[++l]=')'; for(i=1;i<=l;){ while(s[i]=='('){push();i++;} int x=0; while(s[i]>='0'&&s[i]<='9') x=x*10+s[i++]-'0'; num[p]=x; do{ if(s[i]==')'){ while(sym[p]!='(') pop(); p--; num[p]=num[p+1]; } else{ while(can()) pop(); push(); } i++; }while(i<=l&&s[i-1]==')'); } printf("%d",num[0]); return 0; }

 

 

__EOF__

本文作者shenben
本文链接https://www.cnblogs.com/shenben/p/6066337.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   神犇(shenben)  阅读(202)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示