題目描述:
已知火星人使用的運算符為#、$,其與地球人的等價公式如下:
x#y = 2x+3y+4
x$y = 3*x+y+2
其中x、y是無符號整數
地球人公式按C語言規則計算
火星人公式中,$的優先級高於#,相同的運算符,按從左到右的順序計算 現有一段火星人的字符串報文,請你來翻譯並計算結果。
輸入描述:
火星人字符串表達式(結尾不帶回車換行)
**輸入的字符串說明: **
字符串為僅由無符號整數和操作符(#、$)
組成的計算表達式。例如:123#45#6778
用例保證字符串中,操作數與操作符之間沒有任何分隔符。
用例保證操作數取值范圍為32位無符號整數。
保證輸入以及計算結果不會出現整型溢出。
保證輸入的字符串為合法的求值報文,例如:123#45#6778
保證不會出現非法的求值報文,例如類似這樣字符串:
#4$5 //缺少操作數
4$5# //缺少操作數
4#$5 //缺少操作數
4 $5 //有空格
3+4-5*6/7 //有其它操作符
12345678987654321$54321 //32位整數計算溢出
輸出描述:
根據輸入的火星人字符串輸出計算結果(結尾不帶回車換行)
示例:
7#6$15#12
= 7#(3*6+5+2)#12
=7#25#12
=(2*7+3*25+4)#12
=93#12
=2*93+3*12+4
226
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(sc.hasNext()) { String input = sc.nextLine(); System.out.println(func(input)); } sc.close(); } public static int func(String input) { //優先算最后# int index = input.lastIndexOf("#"); if(index != -1) { String left = input.substring(0, index); String right = input.substring(index + 1); int res = 2 * func(left) + 3 * func(right) + 4; return res; } //優先算第一$ index = input.lastIndexOf("$"); if(index != -1) { String left = input.substring(0, index); String right = input.substring(index + 1); int res = 3 * func(left) + func(right) + 2; return res; } return Integer.parseInt(input); } }
