算法训练 表达式计算
2018-02-05 14:38
183 查看
问题描述
输入一个只包含加减乖除和括号的合法表达式,求表达式的值。其中除表示整除。
输入格式
输入一行,包含一个表达式。
输出格式
输出这个表达式的值。
样例输入
1-2+3*(4-5)
样例输出
-4
数据规模和约定
表达式长度不超过100,表达式运算合法且运算过程都在int内进行。
输入一个只包含加减乖除和括号的合法表达式,求表达式的值。其中除表示整除。
输入格式
输入一行,包含一个表达式。
输出格式
输出这个表达式的值。
样例输入
1-2+3*(4-5)
样例输出
-4
数据规模和约定
表达式长度不超过100,表达式运算合法且运算过程都在int内进行。
//无负数的情况下 #include<iostream> #include<math.h> #include<string.h> using namespace std; int p,l; char s[105]; int take(){ int i,sum=0; i=p; for(;p<l;p++) if(s[p]<'0' || s[p]>'9')break; for(;i<p;i++) { sum+=(s[i]-'0')*pow(10,p-i-1); } return sum; } int f(){ int t,sum; char c; c=s[p-1]; if(s[p]=='(') { p++; //去 ( sum=f(); p++; //去 ) } else sum=take(); if(c=='-')sum=-sum; if(p==l || s[p]==')')return sum; else { c=s[p++]; if(c=='*' || c=='/') //遇见乘号或者除号 { while(c=='*' || c=='/') { if(s[p]=='(') { p++; t=f(); p++; } else t=take(); if(c=='*') sum*=t; else if(c=='/') sum/t; c=s[p++]; } } if(c=='+' || c=='-') //遇见加号或者减号 sum+=f(); return sum; } } int main(){ while(cin>>s) { p=0; l=strlen(s); cout<<f()<<endl; } return 0; }