关闭

[华为机试真题]68.简单四则运算

标签: 华为机试真题
1788人阅读 评论(0) 收藏 举报
分类:

题目

输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值
注:
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

思路

题目要求很简单,只是计算个位数的四则运算,且没有括号。主要考察栈的运用,实现时采用两个辅助栈,一个用来存放操作数,一个用来存放运算符。根据操作符的优先级进行计算。
两个数组分别存储操作数和操作符,扫描输入的字符串,当遇到*和/的时候,边计算边存储,将计算结果存到操作数的数组中,当遇到+和-号时只存储不计算。当所有数据存储完毕后,因为运算就只剩下+-运算了.

代码

/*---------------------------------------
*   日期:2015-07-07
*   作者:SJF0115
*   题目:简单四则运算
*   来源:华为机试真题
-----------------------------------------*/
#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;
    }//if
    // 数字栈
    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');
        }//if
        // 运算符 加减
        else if(str[i] == '+' || str[i] == '-'){
            op.push(str[i]);
        }//else
        // 运算符 乘除
        else{
            char o = str[i];
            int a = num.top();
            num.pop();
            int b = str[++i] - '0';
            if(o == '*'){
                num.push(a * b);
            }//if
            else if(o == '/'){
                num.push(a / b);
            }//else
        }//else
    }//for
    // 加减操作
    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);
        }//if
        else if(o == '-'){
            num.push(b-a);
        }//else
    }//while
    return num.top();
}

int main(){
    string str;
    //freopen("C:\\Users\\Administrator\\Desktop\\acm.txt","r",stdin);
    while(cin>>str){
        cout<<calculate(str)<<endl;
    }//while
    return 0;
}
0
0
查看评论

华为机试简单四则运算

简单四则运算 • 问题描述:  输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值注: 1、表达式只含 +, -, *, / 四则运算符,不含括号 2、表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况 3、...
  • gucheng3116
  • gucheng3116
  • 2013-12-02 15:15
  • 725

简单的四则运算

请你编写程序实现能处理两个数的+、-、*、/、%的表达式程序。数据的输入/输出全部使用标准输入/输出,输入数据的第一行为你需要计算表达式的个数,从第2行开始,每一行为你计算的一个表达式,每行数据中没有空格,除%运算外的输入数据皆为float数,除%运算结果为整数外,其他都保留两位小数,每个表达式的结...
  • a997930294
  • a997930294
  • 2014-03-15 08:20
  • 658

PAT乙级1034

1034. 有理数四则运算(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题...
  • qq_22194315
  • qq_22194315
  • 2017-01-13 15:39
  • 159

pat 乙级 1034. 有理数四则运算(20)

具体思路见代码: #include #include #include #include #include #include #include #include #include /////////////// 垮掉!!!!!!!!!!! 考虑 超时 问题 ...
  • qikai121521
  • qikai121521
  • 2017-09-06 14:36
  • 92

Java实现简单四则运算

工作之余,突然想用java实现一下四则运算,经过简单的构思,很快就有了思路,就完成了一个简单版本。 经过慎重考虑,觉得使用栈还是要比数组或者List容易对符号和数字进行控制。 我使用两个栈,分别保存数字和符号,然后判断当前符号和前一个符号的运算级别,来决定是否进行一次弹栈运算(就是挨着前...
  • u013276512
  • u013276512
  • 2017-10-30 14:36
  • 398

华为机试—四则运算

题目:四则运算 问题描述: 输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值 注: 3.1、表达式只含 +, -, *, / 四则运算符,不含括号 3.2、表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况 3.3、要考虑加减乘除按通常四则运算规定的计算...
  • wdkirchhoff
  • wdkirchhoff
  • 2014-12-27 21:57
  • 4131

华为机试 四则运算

/* * 把中缀表达式改成后缀表达式 * 遍历字符串,如果是数字,则输出,同时加上空格和后面的字符分隔 * 如果括号,有2种情况: * 1 如果是(,进栈 * 2 如果是),将栈里面对应的(以及它上面的符号出栈 * 如果是符号,总的规则是只要栈顶的符号的优先级不低于当前符号,则把栈顶的符号一一出栈,...
  • u010732356
  • u010732356
  • 2017-07-14 20:49
  • 123

很简单的C++实现四则运算

网上看了些C++实现四则运算的文章,代码都很乱,在此给出自己实现的很简单的可运行代码。 /* * TestRPN.h * * C++实现整数四则运算 * * 有两个步骤, 一是convert2RPN,把普通的中序表达式改成后序表达式(逆波兰表达式,RPN), * 二是calculateR...
  • liangtb
  • liangtb
  • 2015-03-18 17:12
  • 4571

js实现简单计算器(四则运算)

1.图样: 2.代码: js function validate(str){ var reg = /^\d+$/; if (!reg.test(str)) { alert("请输入数字"); } ...
  • migu77777
  • migu77777
  • 2016-12-01 19:43
  • 1949

JavaScript - 编写四则运算函数

四则运算函数<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>test03.html</tit...
  • wangzi11322
  • wangzi11322
  • 2015-04-25 14:09
  • 2292
    个人资料
    • 访问:1509338次
    • 积分:22516
    • 等级:
    • 排名:第379名
    • 原创:624篇
    • 转载:133篇
    • 译文:60篇
    • 评论:189条
    博客专栏
    文章分类
    最新评论