0

这是我的代码。

package solution;
import java.io.*;
import java.util.Stack;
public class Acadox {
    public static boolean isOperator(String c)
    {
        return ( "+".equals(c) || "-".equals(c) || "&".equals(c) || "|".equals(c) || "~".equals(c) || "X".equals(c));
    }

    /* public String convert(String str)
    {
          char[] chars = str.toCharArray();
          StringBuffer strBuffer = new StringBuffer();
          for (int i = 0; i < chars.length; i++)
          {
            strBuffer.append(Integer.toHexString((int) chars[i]));
          }
          return strBuffer.toString();
    }*/

    public static void main(String[] args)throws IOException {
        // TODO code application logic here
        try
        {
            BufferedReader read = new BufferedReader(new InputStreamReader(System.in));

            String s[]=read.readLine().split(" ");

            Stack<String> st=new Stack<String>();

            st.push(s[0]);
            int i=1;

            int num1,num2,decRes;
            String hexres,result;


            if(isOperator(s[1]) && !"~".equals(s[1]))
            {
                System.out.println("ERROR");
            }
            else if(!isOperator(s[s.length-1]))
            {
                System.out.println("ERROR");
            }
            else
            {
                do
                {
                    if(!isOperator(s[i]))
                    {
                        st.push(s[i]);
                        i++;
                    }  
                    else
                    {
                        if("+".equals(s[i]))
                        {
                            num1 = Integer.parseInt(st.pop(),16);
                            num2 = Integer.parseInt(st.pop(),16);

                            decRes=num1+num2;                          

                            if(decRes>65535)
                                hexres="FFFF";
                            else
                                hexres=Integer.toHexString(decRes);

                            st.push(""+hexres);
                        }
                        else if("-".equals(s[i]))
                        {
                            num1 = Integer.parseInt(st.pop(),16);
                            num2 = Integer.parseInt(st.pop(),16);

                            decRes=num1-num2; 

                            if(decRes<0)
                                hexres="0000";
                            else
                                hexres=Integer.toHexString(decRes);

                            hexres=Integer.toHexString(decRes);

                            st.push(""+hexres);
                        }
                        else if("&".equals(s[i]))
                        {
                             num1 = Integer.parseInt(st.pop(),16);
                             num2 = Integer.parseInt(st.pop(),16);

                            decRes=num1&num2;                          

                            hexres=Integer.toHexString(decRes);

                            st.push(""+hexres);
                        }
                        else if("|".equals(s[i]))
                        {
                             num1 = Integer.parseInt(st.pop(),16);
                            num2 = Integer.parseInt(st.pop(),16);

                            decRes=num1|num2;                          

                            hexres=Integer.toHexString(decRes);

                            st.push(""+hexres);
                        }
                        else if("~".equals(s[i]))
                        {
                            num1 = Integer.parseInt(st.pop(),16);

                            decRes=~num1;                          

                            hexres=Integer.toHexString(decRes);

                            st.push(""+hexres);
                        }
                        else if("X".equals(s[i]))
                        {
                            num1 = Integer.parseInt(st.pop(),16);
                            num2 = Integer.parseInt(st.pop(),16);

                            decRes=num1^num2;                          

                            hexres=Integer.toHexString(decRes);

                            st.push(""+hexres);
                        }
                        i++;
                    }

                }
                while(st.size()!=1);
                result=st.pop().toUpperCase(); 
                System.out.println(result);
            }
        }
        catch(IOException e)
        {
           System.out.println(e.getMessage());
        }
    }
}

当我计算函数(5 7 + )时,我得到了正确的答案。但我希望得到以下格式的答案。

5 7 +  = 000C

那么如何将答案更改为以下格式?

谢谢你。

4

1 回答 1

0

使用类Integer.toHexString(12)的方法,Integer然后可以使用填充在前面附加零

为了'000c'这样做,

String.format("%4s",Integer.toHexString(12)).replace(" ", "0")

或使用 Apache commons StringUtils

System.out.println(StringUtils.leftPad(Integer.toHexString(12), 4, "0"));

输出

000c
于 2013-10-26T06:01:52.950 回答