• leetcode405


    public class Solution
        {
            string ConverToHex(string bit)
            {
                var s = "";
                switch (bit)
                {
                    case "0000":
                        s = "0";
                        break;
                    case "0001":
                        s = "1";
                        break;
                    case "0010":
                        s = "2";
                        break;
                    case "0011":
                        s = "3";
                        break;
                    case "0100":
                        s = "4";
                        break;
                    case "0101":
                        s = "5";
                        break;
                    case "0110":
                        s = "6";
                        break;
                    case "0111":
                        s = "7";
                        break;
                    case "1000":
                        s = "8";
                        break;
                    case "1001":
                        s = "9";
                        break;
                    case "1010":
                        s = "a";
                        break;
                    case "1011":
                        s = "b";
                        break;
                    case "1100":
                        s = "c";
                        break;
                    case "1101":
                        s = "d";
                        break;
                    case "1110":
                        s = "e";
                        break;
                    case "1111":
                        s = "f";
                        break;
                }
                return s;
            }
    
            public string ToHex(int num)
            {
                var fuhao = 1;
                if (num < 0)
                {
                    fuhao = -1;
                    num = num * (-1);
                }
    
                //10进制转16进制,负数使用补码
                var bitAry = new string[32];
                for (int i = 0; i < bitAry.Length; i++)
                {
                    bitAry[i] = "0";
                }
                //STEP1:十进制转二进制
                int index = 0;
                do
                {
                    var x = num % 2;
                    bitAry[index++] = x.ToString();
                    num = num / 2;
                } while (num != 0);
    
                var list = bitAry.ToList();
    
                //STEP2:正数使用原码,负数转补码
                if (fuhao == -1)
                {
                    list.Clear();
    
                    bitAry[bitAry.Length - 1] = "1";//符号为设置为0
    
                    //计算反码
                    StringBuilder sbFan = new StringBuilder();
                    for (int i = 0; i < bitAry.Length - 1; i++)
                    {
                        if (bitAry[i] == "1")
                        {
                            sbFan.Append("0");
                        }
                        else
                        {
                            sbFan.Append("1");
                        }
                    }
                    sbFan.Append("1");//index=31的是符号位
    
                    //反码加1
    
                    var fanma = sbFan.ToString();
    
                    var step = 0;
                    var first = true;
                    for (int i = 0; i < fanma.Length - 1; i++)
                    {
                        var x = Convert.ToInt32(fanma[i].ToString());
                        if (first)
                        {
                            first = false;
                            x = (x + 1) % 2;
                            list.Add(x.ToString());
                            if (x == 0)
                            {
                                step = 1;
                            }
                            else
                            {
                                step = 0;
                            }
                        }
                        else
                        {
                            list.Add(((x + step) % 2).ToString());
                            if (x == 1 && step == 1)
                            {
                                step = 1;
                            }
                            else
                            {
                                step = 0;
                            }
                        }
                    }
                    list.Add("1");
                }
    
    
                //STEP3:二进制转十六进制
                string result = "";
    
                if (fuhao == -1)//负数
                {
                    var temp = "";
                    for (int i = 0; i < list.Count; i++)
                    {
    
                        if ((i + 1) % 4 != 0)//0,1,2
                        {
                            temp = list[i] + temp;
                        }
                        else
                        {
                            temp = list[i] + temp;
                            var hex = ConverToHex(temp);
                            result = hex + result;
                            temp = "";
                        }
                    }
                }
                else//正数
                {
                    var temp = "";
                    for (int i = 0; i < list.Count; i++)
                    {
                        if ((i + 1) % 4 != 0)
                        {
                            temp = list[i] + temp;
                        }
                        else
                        {
                            temp = list[i] + temp;
                            var hex = ConverToHex(temp);
                            result = hex + result;
                            temp = "";
                        }
    
                    }
    
                }
    
                var notZeroIndex = -1;
                for (int i = 0; i < result.Length; i++)
                {
                    if (result[i] != '0')
                    {
                        notZeroIndex = i;
                        break;
                    }
                }
                if (notZeroIndex > 0)
                {
                    result = result.Substring(notZeroIndex);
                }
    
                if (result == "00000000")
                {
                    result = "0";
                }
    
                return result;
            }
        }

    https://leetcode.com/problems/convert-a-number-to-hexadecimal/#/description

  • 相关阅读:
    物理层和数据链路层
    Python :Dive Into Python 中文版 读后感_第五章__类与对象
    关于路由器的2种接法
    关于设计模式的一些理解和感悟
    C# 字符串加密
    Sql server 查询锁表和接锁表
    关于中文参数编码的一些文章推荐
    写与悟
    http 返回的状态码以及含义
    js 操作<input type="hidden" runnat="server" id="month">服务器控件
  • 原文地址:https://www.cnblogs.com/asenyang/p/6732591.html
Copyright © 2020-2023  润新知