这是我的代码。
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
那么如何将答案更改为以下格式?
谢谢。
答案 0 :(得分:0)
使用Integer.toHexString(12)
类的Integer
方法,然后可以使用填充在前面附加零
对'000c'
这样做,
String.format("%4s",Integer.toHexString(12)).replace(" ", "0")
或USE Apache commons StringUtils
System.out.println(StringUtils.leftPad(Integer.toHexString(12), 4, "0"));
000c