華為招聘機試整理5:簡單四則運算,華為四則運算

來源:互聯網
上載者:User

華為招聘機試整理5:簡單四則運算,華為四則運算
華為招聘機試整理5:簡單四則運算

題目:簡單四則運算
問題描述: 輸入一個只包含個位元字的簡單四則運算運算式字串,計算該運算式的值
註:
1、運算式只含 +, -, 乘, / 四則運算子,不含括弧
2、運算式數值只包含個位整數(0-9),且不會出現0作為除數的情況
3、要考慮加減乘除按通常四則運算規定的計算優先順序
4、除法用整數除法,即僅保留除法運算結果的整數部分。比如8/3=2。輸入運算式保證無0作為除數情況發生
5、輸入字串一定是符合題意合法的運算式,其中只包括數字字元和四則運算子字元,除此之外不含其它任何字元,不會出現計算溢出情況
要求實現函數:
int calculate(int len,char expStr)
【輸入】 int len: 字串長度;
char expStr: 運算式字串;
【輸出】 無
【返回】 計算結果

樣本
1) 輸入:char expStr = “1+45-8/3”
函數返回:19
2) 輸入:char expStr = “8/33”
函數返回:6

題目分析:
①這道題輸入字串中有可能有五種字元,數字、+、-、*、/。
②這道題還需要注意的是我們要按照運演算法則來進行計算,所以我們要選擇用棧來解決這道題
演算法思路:
①用字串數組當做符號+-/的棧;用int數組作為數位棧
②入棧過程:
數字棧:檢測如果為數字,我們直接-‘0’放入number中;
符號棧:
1)+ - :因為它們運算優先順序比較低,所以我們需要入棧出棧
檢測為+-時候,我們直接放入sign中
2)* / :因為運算優先順序別比較高,所以哦我們可以直接運算
這裡需要注意索引,這個時候數字索引應該-1,但是字串的索引應該加1,之後還需要+1(因為已經運算完了)
/需要多注意一個地方,就是分母不能為0,為0時候,直接返回-1;
③出棧過程
1)首先第一步我們需要把兩個棧的索引都減去1
2)之後用符號索引進行for迴圈,如果檢測為加號,因為我們需要把數字都放入數位前一個索引裡面,數字索引需要減去1先,之後再運算
3)最後出棧結束返回number[0]就可以了

=====================================================================
參考代碼:

//簡單四則運算.cpp//2014.7.10 hepanhui#include <iostream>#include <string>#include <ctype.h>const int maxn = 1000;using namespace std;int calculate(int len, char *expStr){    //非法輸入    if(expStr == NULL)        return -1;    //定義一個char數組當做符號棧,int數組當做數字棧    char sign[maxn];    int sign_index = 0;    int number[maxn];    int number_index = 0;    for(int i = 0; i < len; i++)    {        //堆棧過程        if(isdigit(expStr[i]))        {            number[number_index ++] = expStr[i] - '0';            continue;        }        if(expStr[i] == '+' || expStr[i] == '-')        {            sign[sign_index ++] = expStr[i];            continue;        }        if(expStr[i] == '*')        {            number[number_index - 1] *= expStr[i+1] - '0';            i++;            continue;        }        if(expStr[i] == '/')        {            if(expStr[i+1] != '0')            {                number[number_index - 1] /= expStr[i+1] - '0';                i++;                continue;            }            else                return -1;        }    }    //出棧過程        number_index--;        sign_index--;        for(int i = sign_index;i >= 0; i--)        {            if(sign[i] == '+')            {                number_index --;                number[number_index] +=  number[number_index + 1];                continue;            }            if(sign[i] == '-')            {                number_index --;                number[number_index] -=  number[number_index + 1];                continue;            }        }        return number[0];}int main(){    int len;    cin >> len;    char str[maxn];    cin >> str;    cout << calculate(len,str) << endl;    return 0;}

調試過程中易犯錯誤的地方:
①當子函數返回為int型時候,我們非法輸入的時候一樣不能寫return 0 最好寫return -1
②出棧的時候要特別注意先將索引直接-1;
④運算過程中也需要注意,我們也要先把數字索引減去1,為了最終返回number[0]儲存最終結果。


昨天華為校園招聘機試,懂的人都知道做對兩道已經很不容易了,昨天問工作人員他們也說做對兩道非常優秀

不要著急,因為人多嘛,總得給人家時間對吧,華為面試還是很公平公正的,找關係走後門的基本沒有,既然你初試成績不錯那應該會有複試機會的,不過也有可能別人工作失誤遺漏之類的,所以你過兩天可以想辦法找學校就業指導中心要HR的連絡方式,相信會有效果的,我也想進華為
 
華為2013校園招聘,機試完了,什時面試,是不是被刷了

建議去對應大街網啊,應屆生網看看。他們有詳細的進程的。
另外,你也可以直接去新浪微博去@對應的招聘人員,裡面有華為的每個地區的招聘微博的。
祝你好運。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.