java 火星文計算


題目描述:

已知火星人使用的運算符為#、$,其與地球人的等價公式如下:

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);
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM