算法-10进制转换成16进制,负数用补码表示
给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。
答案字符串中的所有字母都应该是小写字符,并且除了 0 本身之外,答案中不应该有任何前置零。
注意: 不允许使用任何由库提供的将数字直接转换或格式化为十六进制的方法来解决这个问题。
示例 1:
输入:num = 26 输出:"1a"
示例 2:
输入:num = -1 输出:"ffffffff"
提示:
-231 <= num <= 231 - 1
class Solution {
public static String toHex(int num) {
//0
if(num==0)
{
return "0";//等于0直接返回
}
long newNum;
if(num>0)
{
newNum=num;//大于0直接赋值
}else
{
newNum=(long)Math.pow(2,32)+num;//小于0进行编译求补码 用long型,防止溢出
}
StringBuffer sb=new StringBuffer();//存字符串
while (newNum>0)
{
long c1= newNum%16;//余数
char c2;//转16进制存储
if(c1<10)
{
c2=(char) (c1+'0');
}else
{
c2=(char) (c1-10+'a');
}
sb.append(c2);//字符串拼接
newNum=newNum/16;
}
return sb.reverse().toString();
}
public static void main(String[] args) {
System.out.println(toHex(-2));
}
}