使用递归方法将十进制数转换为十六进制数

时间:2014-07-11 17:35:44

标签: c#

我正在尝试将十进制转换为十六进制。我在网上找到了很多代码。我用了

int decValue = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);

但我的导师告诉我,我不能使用其中任何一种,只需使用递归方法。我是编程新手,对递归方法很困惑。

我确实找到了转换它的其他方法,我正在使用下面的方法,并且我使用switch语句将数字更改为字母。程序运行正常。但不确定它是否是递归方法?有人可以让我知道它是否是递归方法,如果没有帮助我理解递归方法是如何工作的。

static void HexadecimalConversion(int decimals)
{
    if (decimals == 0)
        return;
    else
    {
        int hexadecimals = decimals % 16;
        decimals = decimals / 16;
        HexadecimalConversion(decimals);

3 个答案:

答案 0 :(得分:2)

对于大多数递归问题,您有1或2个特殊情况和一般情况。对于这个问题,有3种情况:

  • 特殊情况#1。要转换的值为0。
  • 一般情况。要转换的值大于0。
  • 终止案例。当要转换的值最终减少为0时。

你需要区分两个'零'条件,以免你总是在结果上附加一个尾随零,所以......你需要一个2层的方法,如下所示:

static string Int2Hex( int value )
{
  if ( value <  0 ) throw new ArgumentOutOfRangeException("value") ;
  if ( value == 0 ) return "0" ;

  string result = ToHex( (uint) value ).ToString() ;
  return result ;
}

static StringBuilder ToHex ( uint value )
{
  StringBuilder buffer ;
  if ( value <= 0 )
  {
    buffer = new StringBuilder() ;
  }
  else
  {
    buffer = ToHex( value / 16 ).Append( "0123456789ABCDEF"[ (int)(value % 16 ) ] ) ;
  }
  return buffer ;
}

答案 1 :(得分:0)

另一种实现方式

 public void ConvertToHexa(int number)
        {
            if (number == 0)
                return;
            ConvertToHexa(number / 16);
            var remainder = number % 16;
            Console.Write(remainder >= 10 ? ((char)(remainder - 10 + 'A')).ToString() : remainder.ToString());
        }

答案 2 :(得分:0)

另一个实现方式:

public string ConvertToHexa(int number)
{
    if (number == 0)
        return String.Empty;
    var head = ConvertToHexa(number / 16);
    var remainder = number % 16;
    var tail = (char)(remainder + (remainder >= 10 ? 'A' - 10 : '0'));
    return head + tail;
}

Console.WriteLine(ConvertToHexa(202))给出"CA"(正确)。