表示式求值

2021-10-03 00:23:23 字數 1435 閱讀 7370

給定乙個只包含加法和乘法的算術表示式,請你程式設計計算表示式的值。

輸入僅有一行,為需要你計算的表示式,表示式中只包含數字、加法運算子「+」和乘法運算子「*」,且沒有括號。

所有參與運算的數字均為 0 到 231-1 之間的整數。

輸入資料保證這一行只有0~9、+、*這12種字元。

輸出只有一行,包含乙個整數,表示這個表示式的值。注意:當答案長度多於4位時,請只輸出最後4位,前導0不輸出。

示例1

1+1*3+4
8
計算的結果為8,直接輸出8。
示例2

1+1234567890*1
7891
計算的結果為1234567891,輸出後4位,即7891。
示例3

1+1000000003*1
4
計算的結果為1000000004,輸出後4位,即4。
對於30%的資料,0≤表示式中加法運算子和乘法運算子的總數≤100;

對於80%的資料,0≤表示式中加法運算子和乘法運算子的總數≤1000;

對於100%的資料,0≤表示式中加法運算子和乘法運算子的總數≤100000。

思路:棧和佇列計算

#include #include #include #include #include #include #include using namespace std;

struct node;

string str;

queueq;

stacks;

mapmp;//用於設定操作符的優先級別

void change()

temp.num=temp.num%10000;

q.push(temp);

}else

temp.op=str[i];

s.push(temp);

i++;

} } while(!s.empty())

}long long cal()else

if(cur.op=='*')

temp.num%=10000;

temp.flag=true;

s.push(temp);//數計算完後進棧

} } node t=s.top();

return t.num;

}int main()

} while(!s.empty())

change();

printf("%d",cal());

return 0;

}

表示式求值

程式的說明見清華大學出版社 資料結構 c語言版 include include define stack init size 40 define stackincrement 20 define ok 1 define false 0 typedef structs stack typedef st...

表示式求值

既然是表示式求值,自然需要在記憶體中儲存計算結果以及中間值。在 用c語言寫直譯器 一 中提過 變數要求是若型別,而 c 語言中的 view plaincopy to clipboardprint?in basic io.h define memery size 26 typedef enum var...

表示式求值

寫了乙個下午,各種糾結,各種問,終於搞明白了。但是自己還是想出來的一點東西的。很爽歪歪的,哈哈。先貼第一次的 include include include include include includeusing namespace std char data 7 7 int sign char ...