標籤:java 華為 演算法 解決方案
題目:
輸入一個運算式,沒有括弧,數字小於0-9之間,輸出計算結果,所有的中間結果化為整形。
例如: 輸入:3+8×2/9-2
輸出:2
函數原型
- public int getMyRet(String str)
分析: 這個題目略顯高端啊, 像我這種非專業的自學者,還真沒有學過編譯原理之類的課程, 要自己實現一個這種小型的編譯器是非常困難啊, 所幸的是這個題目是用java來實現的, 而我本身也曾經看到過用java來實現這類的問題,
這類問題有一種方法就是實作類別編譯器功能的函數, 這個我是駕馭不了, 不過java還有一種比較賤的方法,就是java1.6版本後添加了一個全新的api,就是可以在java中嵌入各種指令碼語言,所以,我們可以很賤的直接使用javascript中的eval函數
直接將結果輸出就ok了!下面來看看這種比較賤的實現吧!當然大神就不要吐槽這種投機取巧的方法了!
代碼如下:
package com.wenj.test;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
/**
* 輸入一個運算式,沒有括弧,數字小於0-9之間,輸出計算結果,所有的中間結果化為整形。
例如: 輸入:3+8×2/9-2
輸出:2
函數原型
public int getMyRet(String str)
* @author wenj91-PC
*
*/
public class TestCalcEq {
public static void main(String args[]){
String strIn = "3+8x2/9-2";
TestCalcEq tc = new TestCalcEq();
System.out.println(tc.getMyRet(strIn));
}
public int getMyRet(String strIn){
String strTemp = strIn;
strTemp = strTemp.replaceAll("x", "*"); //將x轉換為電腦做乘法運算時候的符號*
strTemp = strTemp.replaceAll("X", "*");
ScriptEngineManager sMgr = new ScriptEngineManager();
ScriptEngine sE = sMgr.getEngineByName("js");
Object result = null;
try{
result = (Object)sE.eval("(" + strTemp + ")"); //直接調用js的eval來計算運算式得出結果
}catch(Exception e){
}
return (int)(double)result;
}
}