您的位置:首页 > 其它

算法训练 表达式计算

2018-02-05 14:38 183 查看
问题描述

  输入一个只包含加减乖除和括号的合法表达式,求表达式的值。其中除表示整除。

输入格式

  输入一行,包含一个表达式。

输出格式

  输出这个表达式的值。

样例输入

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: