题目
描述
给定一个字符串描述的算术表达式,计算出结果值。
输入字符串长度不超过100,合法的字符包括”+, -, *, /, (, )”,”0-9”,字符串内容的合法性及表达式语法的合法性由做题者检查。本题目只涉及整型计算。
/*
功能: 对输入的字符串表达式进行求值计算,并输出结果。
输入:String inputString:表达式字符串
返回: int :正常返回true,失败返回false
*/
public static boolean calculate(String inputString)
{
/*在这里实现功能*/
return true;
}
//获取计算结果(int型)
public static int getResult()
{
/*在这里实现功能*/
return 0;
}
输入
输入算术表达式
输出
计算出结果值
样例输入
400+5
样例输出
405
true
代码
此代码没有做异常检测~~
#include <iostream>
#include <string>
#include <stack>
#include "stdlib.h"
using namespace std;
int pri(char m)
{
switch(m)
{
case '+':
case '-':
return 1;
case '*':
case '/':
return 2;
case '(':
case ')':
return 0;
case '#':
return -1;
default:
break;
}
}
int getResult(string s)
{
stack<int> value;
stack<char> sign;
s=s+"#$";
//考虑负数 补零
if(s[0]=='-')
{
s="0"+s;
}
int i=0;
string c="";
while(s[i]!='$')
{
if(s[i]<='9'&&s[i]>='0')
{
c=c+s[i];
i++;
//取出数字
while(s[i]<='9'&&s[i]>='0')
{
c=c+s[i];
i++;
}
i--;
int m=atoi(c.c_str());
value.push(m);
c="";
}
else if(sign.size()==0||s[i]=='('||pri(s[i])>pri(sign.top()))
{
sign.push(s[i]);//压入符号栈
}
else if(s[i]==')')
{
for(; sign.top()!='('; sign.pop())
{
char d=sign.top();
int a=value.top();
value.pop();
int b=value.top();
value.pop();
switch(d)
{
case '+':
{
a=a+b;
break;
}
case '-':
{
a=b-a;
break;
}
case '*':
{
a=a*b;
break;
}
case '/':
{
a=b/a;
break;
}
default:
break;
}
value.push(a);
}
sign.pop();
}
else
{
//遇到#了
for(; sign.size()!=0&&pri(s[i])<=pri(sign.top()); sign.pop())
{
char d=sign.top();
int a=value.top();
value.pop();
int b=value.top();
value.pop();
switch(d)
{
case '+':
{
a=a+b;
break;
}
case '-':
{
a=b-a;
break;
}
case '*':
{
a=a*b;
break;
}
case '/':
{
a=b/a;
break;
}
}
value.push(a);
}
sign.push(s[i]);
}
i++;
}
return value.top();
}
bool calculating(string str)
{
cout<<getResult(str)<<endl;
return true;
}
int main(void)
{
string str;
cin>>str;
if(calculating(str))
{
cout<<"true"<<endl;
}
return 0;
}