问题描述
输入一个算数表达式,表达式包含+,-,*,/(整除)等运算符及括号,表达式长度不超过1000个字符,运算过程的数值均小于2^31-1。
输入格式
一行,算数表达式
输出格式
算数表达式结果
输入样例
(11+3)*2
输出样例
28
限制与约定
时间限制:1s
空间限制:128MB
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> using namespace std; char s[100]; bool IsNum(int x,int y) { for(int i=x;i<=y;i++) if(!(s[i]>=48&&s[i]<=57)) return false; return true; } int dfs(int x,int y) { int i,c1=-1,c2=-1,p=0,u; if(IsNum(x,y-1)){ int ns=0; for(int i=x;i<y;i++) ns=ns*10+s[i]-48; return ns; } for(int i=x;i<y;i++){ switch(s[i]){ case'(':p++;break; case')':p--;break; case'+':case'-':if(p==0)c1=i;break; case'*':case'/':if(p==0)c2=i;break; } } if(c1<0) c1=c2; if(c1<0) return dfs(x+1,y-1); int a1=dfs(x,c1); int a2=dfs(c1+1,y); if (s[c1]=='+') return a1+a2; else if(s[c1]=='-') return a1-a2; else if(s[c1]=='*') return a1*a2; else return a1/a2; } int main() { scanf("%s",s); int len=strlen(s); int k=dfs(0,len); cout<<k; return 0; }