华为oj 四则运算
2017-03-27 09:27
387 查看
描述
请实现如下接口
/* 功能:四则运算
* 输入:strExpression:字符串格式的算术表达式,如: “3+2*{1+2*[-4/(8-6)+7]}”
* 返回:算术表达式的计算结果
*/
public static int calculate(String strExpression)
{
/* 请实现*/
return 0;
}
约束:
pucExpression字符串中的有效字符包括[‘0’-‘9’],‘+’,‘-’, ‘*’,‘/’ ,‘(’, ‘)’,‘[’, ‘]’,‘{’ ,‘}’。
pucExpression算术表达式的有效性由调用者保证;
知识点 栈
运行时间限制 10M
内存限制 128
输入
输入一个算术表达式
输出
得到计算结果
样例输入 3+2*{1+2*[-4/(8-6)+7]}
样例输出 25
请实现如下接口
/* 功能:四则运算
* 输入:strExpression:字符串格式的算术表达式,如: “3+2*{1+2*[-4/(8-6)+7]}”
* 返回:算术表达式的计算结果
*/
public static int calculate(String strExpression)
{
/* 请实现*/
return 0;
}
约束:
pucExpression字符串中的有效字符包括[‘0’-‘9’],‘+’,‘-’, ‘*’,‘/’ ,‘(’, ‘)’,‘[’, ‘]’,‘{’ ,‘}’。
pucExpression算术表达式的有效性由调用者保证;
知识点 栈
运行时间限制 10M
内存限制 128
输入
输入一个算术表达式
输出
得到计算结果
样例输入 3+2*{1+2*[-4/(8-6)+7]}
样例输出 25
#include <iostream> #include <stdlib.h> #include <string.h> #include <cctype> using namespace std; unsigned int i = 0; char str[100]; int T(); int E1(int); int T2(); int E2(int); int E(){ int anst = T(); return E1(anst); } int T() { int preresult = T2(); return E2(preresult); } int E1(int preresult){ //加减计算 int ans = preresult; if(i < strlen(str)){ if(str[i] == '+'){ i++; int nextNum = T(); preresult = preresult+nextNum; ans = E1(preresult); //连加、减的情况 } else if(str[i] == '-'){ i++; int nextNum = T(); preresult = preresult-nextNum; ans = E1(preresult); } } return ans; } int E2(int preresult){ //乘除计算 int ans = preresult; if(i < strlen(str)){ if(str[i] == '*'){ i++; int nextNum = T2(); preresult = preresult*nextNum; ans = E2(preresult); //连乘、除的情况 } else if(str[i] == '/'){ i++; int nextNum = T2(); preresult = preresult/nextNum; ans = E2(preresult); } } return ans; } int T2(){ int res = 0; int sign = 1; //正负号 if(i < strlen(str)){ if(str[i] == '-'){ sign = -1; i++; } if(isalnum(str[i])){ while(i < strlen(str) && isalnum(str[i])){ res = res*10 + (str[i] - '0'); i++; } res = res*sign; } else if(str[i] == '(' || str[i] == '[' || str[i] == '{'){ char bracket = str[i]; i++; res = E(); if(i < strlen(str)){ if((bracket == '(' && str[i] == ')') || (bracket == '[' && str[i] == ']') || (bracket == '{' && str[i] == '}')) i++; } } } return res; } int main(){ i = 0; while(cin >> str){ int res = E(); cout << res << endl; } return 0; }
相关文章推荐
- 华为OJ—四则运算
- 【华为OJ】四则运算
- 华为OJ——四则运算
- 【华为oj】求解立方根
- 【华为oj】放苹果
- 华为OJ-密码单项加密
- 【华为oj】第一关
- 华为 OJ 初级 输入一个int型数据,计算出该int型数据在内存中存储时1的个数。
- [华为OJ--C++]041查找输入整数二进制中1的个数
- 华为OJ:提取不重复的整数
- 华为OJ:字符串排序
- 华为OJ:名字的漂亮度
- [华为OJ--C++]029-统计每个月兔子的总数
- [华为OJ--C++]076-蛇形矩阵
- 华为OJ------高精度整数加法
- 【华为oj】密码截取(字符串对称)
- 华为oj初级 放苹果
- 华为oj初级 合法IP
- 华为oj初级 等差数列
- 华为oj初级 求解立方根