日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

蓝桥杯-表达式计算(java)

發布時間:2025/3/20 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 蓝桥杯-表达式计算(java) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
算法訓練 表達式計算 時間限制:1.0s 內存限制:256.0MB問題描述輸入一個只包含加減乖除和括號的合法表達式,求表達式的值。其中除表示整除。輸入格式輸入一行,包含一個表達式。輸出格式輸出這個表達式的值。樣例輸入1-2+3*(4-5)樣例輸出-4數據規模和約定表達式長度不超過100,表達式運算合法且運算過程都在int內進行。

解題思路:這個題目看起來很簡單,但是其實是不簡單的,這個需要運用棧的知識,然后需要把中綴表達式轉后綴表達式來進行計算,如果不太清楚建議看一下棧的知識。

package com.sihai.advance; import java.util.Scanner; import java.util.Stack;public class biaodashi {public static void main(String[] args) {// TODO Auto-generated method stubScanner scanner = new Scanner(System.in);Stack<Integer> nums = new Stack<Integer>(); // 保存數字Stack<Character> opes = new Stack<Character>(); // 保存操作符String string = scanner.nextLine();int n = 0; // 保存每一個數字char[] cs = string.toCharArray();for (int i = 0; i < cs.length; i++) {char temp = cs[i];if (Character.isDigit(cs[i])) {n = 10 * n + Integer.parseInt(String.valueOf(cs[i])); // 大于10的數字保存} else {if (n != 0) {nums.push(n);n = 0;}if (temp == '(') {opes.push(temp);} else if (temp == ')') {while (opes.peek() != '(') { // 括號里面運算完int t = cal(nums.pop(), nums.pop(), opes.pop());nums.push(t);}opes.pop();} else if (isType(temp) > 0) {if (opes.isEmpty()) { // 棧為空直接入棧opes.push(temp);} else {// 若棧頂元素優先級大于或等于要入棧的元素,將棧頂元素彈出并計算,然后入棧if (isType(opes.peek()) >= isType(temp)) {int t = cal(nums.pop(), nums.pop(), opes.pop());nums.push(t);}opes.push(temp);}}}}// 最后一個字符若是數字,未入棧if (n != 0) {nums.push(n);}while (!opes.isEmpty()) {int t = cal(nums.pop(), nums.pop(), opes.pop());nums.push(t);}System.out.println(nums.pop());}// 返回的是運算符的優先級,數字和()不需要考慮public static int isType(char c) {if (c == '+' || c == '-') {return 1;} else if (c == '*' || c == '/') {return 2;} else {return 0;}}// 運算次序是反的,跟入棧出棧次序有關public static int cal(int m, int n, char c) {int sum = -987654321;if (c == '+') {sum = n + m;} else if (c == '-') {sum = n - m;} else if (c == '*') {sum = n * m;} else if (c == '/') {sum = n / m;}return sum;} }

總結

以上是生活随笔為你收集整理的蓝桥杯-表达式计算(java)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。