题目
输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值
注:
3.1、表达式只含 +, -, *, / 四则运算符,不含括号
3.2、表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况
3.3、要考虑加减乘除按通常四则运算规定的计算优先级
3.4、除法用整数除法,即仅保留除法运算结果的整数部分。比如8/3=2。输入表达式保证无0作为除数情况发生
3.5、输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算符字符,除此之外不含其它任何字符,不会出现计算溢出情况
要求实现函数
int calculate(int len,char *expStr)
【输入】 int len: 字符串长度;char *expStr: 表达式字符串;
【输出】 无
【返回】 计算结果
示例
1)输入:char *expStr = “1+4*5-8/3”
函数返回:19
2)输入:char *expStr = “8/3*3”
函数返回:6
思路
题目要求很简单,只是计算个位数的四则运算,且没有括号。主要考察栈的运用,实现时采用两个辅助栈,一个用来存放操作数,一个用来存放运算符。根据操作符的优先级进行计算。
两个数组分别存储操作数和操作符,扫描输入的字符串,当遇到*和/的时候,边计算边存储,将计算结果存到操作数的数组中,当遇到+和-号时只存储不计算。当所有数据存储完毕后,因为运算就只剩下+-运算了.
代码
#include <iostream>
#include <string>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
int calculate(string str){
int size = str.size();
if(size == 0){
return 0;
}
stack<int> num;
stack<char> op;
for(int i = 0;i < size;++i){
if(str[i] >= '0' && str[i] <= '9'){
num.push(str[i] - '0');
}
else if(str[i] == '+' || str[i] == '-'){
op.push(str[i]);
}
else{
char o = str[i];
int a = num.top();
num.pop();
int b = str[++i] - '0';
if(o == '*'){
num.push(a * b);
}
else if(o == '/'){
num.push(a / b);
}
}
}
while(!op.empty()){
char o = op.top();
op.pop();
int a = num.top();
num.pop();
int b = num.top();
num.pop();
if(o == '+'){
num.push(a + b);
}
else if(o == '-'){
num.push(b-a);
}
}
return num.top();
}
int main(){
string str;
while(cin>>str){
cout<<calculate(str)<<endl;
}
return 0;
}
<script type="text/javascript">
$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('<ul/>').addClass('pre-numbering').hide();
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i <= lines; i++) {
$numbering.append($('<li/>').text(i));
};
$numbering.fadeIn(1700);
});
});
</script>
分享到:
相关推荐
华为机试真题(非牛客网试练题)OD考试真题,不定期更新,文档含代码解答
华为机试一霸教你过华为机试演讲稿..pdf
华为OD机试(..75.rar
收集整理华为机试108题,目录清晰,内涵C、C++答案 适合初中级练手学习,短时突击
华为OD系列--华为OD机试
华为机试一霸教你过华为机试.doc
。。。
。。。
华为机试一霸教你过华为机试。大菊厂招聘有三关,心理测试,机试,面试。
华为OD机试真题整理合集
(43条消息) 华为OD机试真题2023(JAVA&JS)_华为机试真题_若博豆的博客-CSDN博客.mhtml
华为机试(Python)真题Od.docx
华为 OD 机试真题 机试题专栏 题目来自牛客平台机考同学的机试分享,题目描述信息可能记录不完整,题解无法保证通过率,只提供结题思路,注意!注意!!不要直接使用博主代码进行机考! 欢迎加微信: Ayemmar 本文...
华为机试算法题总结 经验分享
华为OD机试真题是华为公司用于筛选人才的一种方式,通过这种方式,华为公司可以更好地了解应聘者的技能和能力,从而更好地选择合适的人才。在华为OD机试真题中,应聘者需要解决一系列的问题,包括算法、数据结构、...
本人在准备2014年华为机试的时候,进行整理的,代码全部运行成功。如有错误,请大家见谅。
里面有几十道华为历届考过的机试题,可供大家研究和参考,主要是里面的思想,只要理解透了里面的思想,非常有助于机试。
贰壹贰叁零华为OD机试.pptx 华为OD机试.pptx 华为OD机试.pptx
华为机试.md
华为机试.py