国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

華為機試在線訓練-牛客網(25)四則運算

2019-11-08 20:15:48
字體:
來源:轉載
供稿:網友

題目描述

請實現如下接口

    /* 功能:四則運算

     * 輸入:strExPRession:字符串格式的算術表達式,如: "3+2*{1+2*[-4/(8-6)+7]}"

         * 返回:算術表達式的計算結果

     */

    public static int calculate(String strExpression)

    {

        /* 請實現*/

        return 0;

    } 

約束:

pucExpression字符串中的有效字符包括[‘0’-‘9’],‘+’,‘-’, ‘*’,‘/’ ,‘(’, ‘)’,‘[’, ‘]’,‘{’ ,‘}’。

pucExpression算術表達式的有效性由調用者保證; 

 

輸入描述:

輸入一個算術表達式

輸出描述:

得到計算結果

輸入例子:
3+2*{1+2*[-4/(8-6)+7]}
輸出例子:
25
/* * 把中綴表達式改成后綴表達式 * 遍歷字符串,如果是數字,則輸出,同時加上空格和后面的字符分隔 * 如果括號,有2種情況: * 1 如果是(,進棧 * 2 如果是),將棧里面對應的(以及它上面的符號出棧 * 如果是符號,總的規則是只要棧頂的符號的優先級不低于當前符號,則把棧頂的符號一一出棧, * 直到遇到棧頂的符號的優先級低于當前符號為止。具體有2種情況: * 1 如果是+或-,將棧頂的符號一一出棧,直到遇到(或棧空了為止;然后把自身壓棧 * 2 如果是*或/,將棧里面的*或/出棧,直到遇到其他符號或棧空了為止;然后把自身壓棧 */void convert2RPN(string &s) {    stringstream ss;    stack<char> stk;    for (int i = 0; i < s.length(); i++) {        if (isdigit(s[i])) {//數字            ss << s[i];            // 如果下一位不是數字,或者已經是最后一位,就加上空格            if ((i < s.length() - 1 && !isdigit(s[i+1]))                    || i == s.length() - 1) {                ss << ' ';            }        }         else {  //操作符或括號            if (stk.empty()) {                stk.push(s[i]);            }            else {                switch (s[i]) {                case '(':                    stk.push(s[i]);                    break;                case ')':                    // 把配套的'('和之上的符號出棧                    while (stk.top() != '(') {                        ss << stk.top();                        stk.pop();                    }                    stk.pop();                    break;                case '+':                case '-':                    // '+' '-' '*' '/'都出棧                    while (!stk.empty() && stk.top() != '(') {                        ss << stk.top();                        stk.pop();                    }                    stk.push(s[i]);                    break;                case '*':                case '/':                    // '*'和'/'出棧                    while (!stk.empty() && (stk.top() == '*' || stk.top() == '/')) {                        ss << stk.top();                        stk.pop();                    }                    stk.push(s[i]);                    break;                }            }        }    }    // 運算完了,此時把棧的元素都pop出來    while (!stk.empty()) {        ss << stk.top();        stk.pop();    }    s = ss.str();}/* * 計算后綴表達式 * 遍歷后綴表達式,如果是數字,則壓棧,如果是符號,則從棧里面pop兩個數字,然后和符號做 * 相應的運算,同時把結果壓棧,最后把棧頂結果返回 */float calculateRPN(const string &s) {    stack<float> stk;    for (size_t i = 0; i < s.length(); i++) {        // 如果是數字,就和之前的數字組合起來        if (isdigit(s[i])) {            int e = atoi(&s[i]);            int t = e / 10;            while (t > 0) {                i++;                t /= 10;            }            i++;            stk.push(e);        }        else {            float r = stk.top();            stk.pop();            float l = stk.top();            stk.pop();            float result;            switch (s[i]) {            case '+':                result = l + r;                break;            case '-':                result = l - r;                break;            case '*':                result = l * r;                break;            case '/':                result = l / r;                break;            }            stk.push(result);        }    }    return stk.top();}int main(){    string str;    while(cin>>str){        convert2RPN(str);        cout << calculateRPN(str) << endl;    }}有的OJ可以使用python,python解決這種題只要一行。。。
print(input())
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 庄河市| 盖州市| 潍坊市| 云霄县| 马公市| 武鸣县| 三门县| 肇源县| 临澧县| 西和县| 宝清县| 固始县| 尤溪县| 观塘区| 建始县| 科技| 淳安县| 百色市| 阿拉善左旗| 祁阳县| 伊金霍洛旗| 迁安市| 桦甸市| 凤冈县| 静海县| 南皮县| 沈阳市| 武城县| 赤城县| 昭觉县| 大余县| 拜泉县| 达尔| 娱乐| 阳泉市| 隆回县| 扎赉特旗| 凌海市| 大洼县| 上高县| 东城区|