简体   繁体   English

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

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

Trying to write a program that converts a Decimal number to a Hexadecimal number that implements recursion. 尝试编写将十进制数转换为实现递归的十六进制数的程序。

Can't use stuff like 不能使用类似

cout << hex << x << endl; 

Need to know how to write the function manually. 需要知道如何手动编写函数。

I tried this but it didn't really work: 我尝试了一下,但没有真正起作用:

The input is an integer input by the user, and ss doesn't contain anything before this function. 输入是用户输入的整数,并且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);

}

Not sure if I fully understand how to convert from Decimal to Hex, but what's hanging me up more is getting it to work with recursion. 不知道我是否完全理解如何从十进制转换为十六进制,但是让我烦恼的是使它与递归一起使用。 Any ideas? 有任何想法吗?

EDIT: 编辑:

I added in the if statement that was suggested by awesomeyi, and took out the returns in the switch, and now it sort of works... but not really. 我添加了awesomeyi建议的if语句,并在切换中取出了返回值,现在它可以工作了……但实际上不是。 Here's the new code: 这是新的代码:

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);

}

It works, but the output is backwards, and it adds a zero to the end of it. 它可以工作,但是输出是向后的,并且在其末尾添加零。 If I convert 16 in decimal to hex, it gives me 010. If I give it a bigger number like 4598, it gives me 6F110. 如果我将十进制的16转换为十六进制,它将给我010。如果给它更大的数字(如4598),它将给我6F110。 The correct hex value for 4598 is 11F6. 4598的正确十六进制值为11F6。

This is for a school assignment. 这是用于学校作业。 Should I actually try to amend this? 我是否应该尝试对此进行修改? Or should I just flip it around after the function? 还是应该在功能结束后翻转一下?

Your base case should be when num is 0. Right now, no matter what num is, you return ss.str() . 您的基本情况应该是num为0时。现在,无论num是多少,您都将返回ss.str() I would add this: 我将添加以下内容:

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

And remove the other return ss.str() . 并删除其他return ss.str()

It print backwards because that's what you define in your recursion :) 它向后打印,因为这就是您在递归中定义的内容:)

Basically it should look like this: 基本上应该看起来像这样:

(psuedo code) (伪代码)

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

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

if you are going to return a string, similarly, it should look like: 如果要返回一个字符串,类似地,它应该类似于:

(psuedo code) (伪代码)

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

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

This is my code. 这是我的代码。

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