繁体   English   中英

使用递归的十进制到十六进制转换器(C ++)

[英]Decimal to Hex converter using Recursion (C++)

尝试编写将十进制数转换为实现递归的十六进制数的程序。

不能使用类似

cout << hex << x << endl; 

需要知道如何手动编写函数。

我尝试了一下,但没有真正起作用:

输入是用户输入的整数,并且ss在此函数之前不包含任何内容。

string convertHex(int num, ostringstream &ss)
{

    int x = num % 16;

    switch (x)
    {
        case 10: ss << "A"; return ss.str(); break;
        case 11: ss << "B"; return ss.str(); break;
        case 12: ss << "C"; return ss.str(); break;
        case 13: ss << "D"; return ss.str(); break;
        case 14: ss << "E"; return ss.str(); break;
        case 15: ss << "F"; return ss.str(); break;
        default: ss <<   x; return ss.str(); break;
    }

    return convertHex(num / 16, ss);

}

不知道我是否完全理解如何从十进制转换为十六进制,但是让我烦恼的是使它与递归一起使用。 有任何想法吗?

编辑:

我添加了awesomeyi建议的if语句,并在切换中取出了返回值,现在它可以工作了……但实际上不是。 这是新的代码:

string convertHex(int num, ostringstream &ss)
{

    int x = num % 16;

    if (num == 0)
    {
        ss << 0;
        return ss.str();
    }

    switch (x)
    {
        case 10: ss << "A";  break;
        case 11: ss << "B";  break;
        case 12: ss << "C";  break;
        case 13: ss << "D";  break;
        case 14: ss << "E";  break;
        case 15: ss << "F";  break;
        default: ss << x;    break;
    }

    return convertHex(num / 16, ss);

}

它可以工作,但是输出是向后的,并且在其末尾添加零。 如果我将十进制的16转换为十六进制,它将给我010。如果给它更大的数字(如4598),它将给我6F110。 4598的正确十六进制值为11F6。

这是用于学校作业。 我是否应该尝试对此进行修改? 还是应该在功能结束后翻转一下?

您的基本情况应该是num为0时。现在,无论num是多少,您都将返回ss.str() 我将添加以下内容:

if(!num) return ss.str();

并删除其他return ss.str()

它向后打印,因为这就是您在递归中定义的内容:)

基本上应该看起来像这样:

(伪代码)

printHex(int i) {
    if i == 0 {
        // do nothing
        return;
    }

    printHex( i / 16);
    print out hex value of i %16
}

如果要返回一个字符串,类似地,它应该类似于:

(伪代码)

string toHex(int i) {
    if (i == 0)  {
        return "";
    }

    return toHex(i/16) + convertToHex( i % 16);
}

这是我的代码。

string convertDecToHex(int decimalNumber, string buffer)
{
    int x = decimalNumber % 16;
    char x_to_char = x + '0';
    if (decimalNumber == 0)
    {
        return buffer;
    }
    switch (x)
    {
    case 10: buffer = 'A' + buffer; break;
    case 11: buffer = 'B' + buffer; break;
    case 12: buffer = 'C' + buffer; break;
    case 13: buffer = 'D' + buffer; break;
    case 14: buffer = 'E' + buffer; break;
    case 15: buffer = 'F' + buffer; break;
    default: buffer = x_to_char + buffer;
    }
    return convertDecToHex(decimalNumber / 16, buffer);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM