这道题看似简单实际上难点在负数的补码上,由于java没有无符号整数所以我采用的方法是将负数按照2的31次方去补码然后检测位数字符串长度是8位的时候将高位加8
上代码
public class Solution {
public String toHex(int num) {
String hex = "";
int toHexNum = num;
if(toHexNum == 0)
hex = hex + Integer.toString(0);
if(num < 0)
toHexNum = (toHexNum + 2147483647) + 1;
int time = 0;
while(toHexNum > 0||(num<0 && time<8)){
int post = toHexNum%16;
toHexNum = toHexNum/16;
if(time==7 && num<0)
post += 8;
if(post>=10){
hex = (char)('a' + (post -10))+hex;
}
else
hex = "" + Integer.toString(post) + hex;
time++;
}
return hex;
}
}
2016/9/29