网易面试题——奇怪的表达式求值

来源:互联网 发布:oracle删除字段数据 编辑:程序博客网 时间:2024/05/12 15:20

题目:

常规的表达式求值,我们都会根据计算的优先级来计算。比如*/的优先级就高于+-。但是小易所生活的世界的表达式规则很简单,从左往右依次计算即可,而且小易所在的世界没有除法,意味着表达式中没有/,只有(+, – 和 *)。现在给出一个表达式,需要你帮忙计算出小易所在的世界这个表达式的值为多少

输入描述:

输入为一行字符串,即一个表达式。其中运算符只有-,+,*。参与计算的数字只有0~9.
保证表达式都是合法的,排列规则如样例所示。

输出描述:

输出一个数,即表达式的值

输入例子:

3+5*7

输出例子:

56

分析:

根据题意,表达式都是合法的,则证明第一个为操作数,之后操作符合操作数依次交替出现,只需用switch语句判断每次的操作符,再将之前的result与下一个操作数按照操作符进行运算即可。

算法代码:

int strangeExpression(string & expression){    int result = (int)expression[0] - 48;        for (int i = 2; i < expression.size(); i += 2) {        switch (expression[i-1]) {            case '+':            {                result = result + ((int)expression[i] - 48);                break;            }            case '-':            {                result = result - ((int)expression[i] - 48);                break;            }            case '*':            {                result = result * ((int)expression[i] - 48);                break;            }            default:            {                cout << "ERROR EXPRESSION!" << endl;                return 0;            }        }    }        return result;}

测试代码:

////  main.cpp//  strangeExpression////  Created by Jiajie Zhuo on 2017/4/11.//  Copyright © 2017年 Jiajie Zhuo. All rights reserved.//#include <iostream>#include <string>using namespace std;int strangeExpression(string & expression);int main(int argc, const char * argv[]) {    string expression;        cout << "Please enter the expression: ";    cin >> expression;        cout << "The result of the strange expression is " << strangeExpression(expression) << endl;        return 0;}

0 0
原创粉丝点击