十六进制数转换器

时间:2017-05-26 10:32:04

标签: c recursion

我试图编写一个递归函数,它获取一个十进制数并以十六进制打印该值 但我不知道我的代码中有什么 请帮助我,我仍然是Recursion中的新手,并且不会得到它... ...

    my code:

void PrintHexadecimalNumber(int n)
{
    if (n%16==0)
        return ;

    PrintHexadecimalNumber(n/16);

    switch ((n % 16))// A-F cases
    {
    case (10):
        printf("A");
        break;
    case (11):
        printf("B");
        break;
    case (12):
        printf("C");
        break;
    case (13):
        printf("D");
        break;
    case (14):
        printf("E");
        break;
    case (15):
        printf("F");
        break;
    }

    if ((n%16)<10)
        printf(n%16);

}

1 个答案:

答案 0 :(得分:3)

由于您为停止递归而进行的测试,您的代码无法正常工作。

if (n%16==0)

如果您有数字(十六进制)10,该函数将立即停止,因为n%16将为0.您实际想要测试的是n为0时。

if (n==0)

您的switch语句也应该扩展为包含值0到9,而不是在其后面添加单独的if语句。您可以通过省略break

将它们组合在一起
switch(n % 16)
   {
/* existing case statements go here */
case 0:
case 1:
case 2:
...
case 9:
   printf("%d",n % 16); // also fixing this as per comments above.
break;
   }

或者您可以使用printf("%x",n % 16)并完全取消switch,如果您尝试做的是探索递归的工作方式。