zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    25、DataReaderWriter
    javascript 事件(基础)0831
    html 表单下拉列表框
    css
    getElementById的三个用法
    javascript原型对象prototype
    JS String类型
    javascript闭包及作用域
    JavaScript匿名函数
    Javascript表单(text,radio,checkbox等)验证大全0830
  • 原文地址:https://www.cnblogs.com/asenyang/p/6732591.html
Copyright © 2011-2022 走看看