題目:四則運算
問題描述:
輸入乙個只包含個位數字的簡單四則運算表示式字串,計算該表示式的值
注: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#include#include#include#includeusing namespace std;
stackop;
stacknums;
int main(int argc, char *argv)
{ string s;
while(getline(cin,s)!=null)
{while(!op.empty())op.pop();
while(!nums.empty())nums.pop();
int len=s.size();
int i=0;
while(s[i]!='"')i++;
for(i++;i
char *expstr = "1+4*5-8/3"
char *expstr = "8/3*3"
char *expstr = "2*3+3-2"
char *expstr = "3-9/2"
結果:
華為機試簡單四則運算
簡單四則運算 問題描述 輸入乙個只包含個位數字的簡單四則運算表示式字串,計算該表示式的值 注 1 表示式只含 四則運算符,不含括號 2 表示式數值只包含個位整數 0 9 且不會出現0作為除數的情況 3 要考慮加減乘除按通常四則運算規定的計算優先順序 4 除法用整數除法,即僅保留除法運算結果的整數部分...
四則運算 華為機試 C C
請實現如下介面 功能 四則運算 輸入 strexpression 字串格式的算術表示式,如 3 2 返回 算術表示式的計算結果 publicstaticintcalculate string strexpression 請實現 return0 約束 pucexpression字串中的有效字元包括 0...
華為機試 四則運算(陣列解決)
題目 四則運算 問題描述 輸入乙個只包含個位數字的簡單四則運算表示式字串,計算該表示式的值 注 3.1 表示式只含 四則運算符,不含括號 3.2 表示式數值只包含個位整數 0 9 且不會出現0作為除數的情況 3.3 要考慮加減乘除按通常四則運算規定的計算優先順序 3.4 除法用整數除法,即僅保留除法...