九度OJ 1019
2019獨角獸企業重金招聘Python工程師標準>>>
看到這道題網上給的解答都比較繁瑣,想了個想到一個簡便方法。
?
首先定義一個數組棧stack[],然后掃描算術表達式,遇到“+”則將“+”后面的數壓棧,遇到“-”則將“-”后面的數乘以“-1.0”后入棧。
遇到“*”或者“/”后,將“*”“/”前后的數做乘除運算后覆蓋壓棧(覆蓋乘除號前入棧的那個數)。
最后將整個棧中的數相加即為最終結果。java代碼如下:
?
import?java.text.DecimalFormat; import?java.util.ArrayList; import?java.util.List; import?java.util.Scanner; /**?*?@author:?pricker*?*/ public?class?item1019?{/***?@param?args*/public?static?void?main(String[]?args)?{//?TODO?Auto-generated?method?stubScanner?scan?=?new?Scanner(System.in);String?input;List<String>?result?=?new?ArrayList<String>();while(!(input?=?scan.nextLine()).equals("0")){result.add(caculate(input));}for(int?i=0;i<result.size();i++){System.out.println(result.get(i));}}public?static?String?caculate(String?input){String[]?inputArray?=?input.split("?");int?len?=?1001;double[]?stack?=?new?double[len];int?tail?=?0;stack[0]?=?Double.valueOf(inputArray[0]);for(int?i=1;i<inputArray.length;i++){?????if(inputArray[i].equals("+")){stack[++tail]?=?Double.valueOf(inputArray[++i]);}else?if(inputArray[i].equals("-")){stack[++tail]?=?-1.0*Double.valueOf(inputArray[++i]);}else?if(inputArray[i].equals("*")){stack[tail]?=?stack[tail]*Double.valueOf(inputArray[++i]);}else?if(inputArray[i].equals("/")){stack[tail]?=?stack[tail]/Double.valueOf(inputArray[++i]);}???}double?result?=?0.0;for(int?i=0;i<=tail;i++){result?+=?stack[i];}DecimalFormat?df?=?new?DecimalFormat("0.00");return?df.format(result);} }?
轉載于:https://my.oschina.net/u/2400412/blog/552421
總結
- 上一篇: Rhel7/Centos7 修改运行级别
- 下一篇: mysql 主从图