Solutions of Expression - MarisaOJ: Marisa Online Judge

Solutions of Expression

Select solution language

Write solution here.


User Avatar phphongyd    Created at    33 likes

Hiểu về bài toán Bài toán yêu cầu chúng ta: Nhập: Một biểu thức toán học chỉ bao gồm các phép tính cộng, trừ, nhân. Xử lý: Đánh giá biểu thức và thực hiện các phép tính. Xuất: Kết quả của phép tính. Giải pháp sử dụng hàm eval() Hàm eval() trong Python là một hàm vô cùng tiện lợi, cho phép chúng ta đánh giá một biểu thức được biểu diễn dưới dạng một chuỗi. Đây là một công cụ mạnh mẽ để giải quyết bài toán trên. Code ``` s = input() print(eval(s)) ```

User Avatar Kaizen    Created at    3 likes

1.Khởi tạo: Một biến num để thành lập số trong xâu Một biến op (toán tử) ban đầu là '+' để xử lý số đầu tiên. Một stack để lưu trữ các giá trị tạm thời. 2.Duyệt xâu: Khi gặp một ký tự không phải số (hoặc đã đến cuối xâu), xử lý số và toán tử trước đó: Nếu op là '+', đẩy num vào stack. Nếu op là '-', đẩy -num vào stack. Nếu op là '*' hoặc '/', lấy phần tử trên cùng của stack, thực hiện phép nhân hoặc chia với num, rồi đẩy kết quả trở lại vào stack. Cập nhật op thành ký tự hiện tại và đặt lại num về 0. 3.Tính kết quả: Sau khi duyệt hết xâu, tổng tất cả các giá trị trong stack sẽ cho ra kết quả cuối cùng của biểu thức. Vì kết quả có thể rất lớn nên cần sử dụng long long Sử dụng stack để tận dụng việc ưu tiên toán tử '*','/' là một giải pháp hợp lí trong bài toán này **Lưu ý:** Hãy tự code trước khi xem code mẫu để tham khảo : Code: ``` #include <iostream> #include <stack> #include <string> #define int long long using namespace std; int calculate(string s) { stack<int> st; int num = 0; char op = '+'; for (int i = 0; i < s.size(); i++) { char c = s[i]; if (isdigit(c)) { num = num * 10 + (c - '0'); } if ((!isdigit(c) && c != ' ') || i == s.size() - 1) { if (op == '+') { st.push(num); } else if (op == '-') { st.push(-num); } else if (op == '*') { int top = st.top(); st.pop(); st.push(top * num); } else if (op == '/') { int top = st.top(); st.pop(); st.push(top / num); } op = c; num = 0; } } int result = 0; while (!st.empty()) { result += st.top(); st.pop(); } return result; } signed main() { string s; getline(cin,s); cout<<calculate(s); return 0; } ```