我正在尝试将十进制转换为十六进制。我在网上找到了很多代码。我用了
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);
答案 0 :(得分:2)
对于大多数递归问题,您有1或2个特殊情况和一般情况。对于这个问题,有3种情况:
你需要区分两个'零'条件,以免你总是在结果上附加一个尾随零,所以......你需要一个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"
(正确)。