将十进制转换为十六进制,找不到我的逻辑错误

时间:2015-04-10 03:35:49

标签: c++

我是C ++和编码的新手。我知道存在逻辑错误,但我无法识别它。我试图输入一个小数,并将输出连接为十六进制。它似乎只运行一次循环,即使控制变量显然还不是0。

int main()
{
    long rem = 0,
    int hex = 0; 
    cout << "enter the number to convert ";
    cin >> rem;     
    hex = rem / 16;
    while (rem > 0)
    {
        rem = rem % 16;
        hex = hex + rem;
        cout << hex << "" << rem << endl;
        rem = rem / 16;
    }
    return 0;
}

3 个答案:

答案 0 :(得分:2)

如果你需要做的只是以十六进制输出值,那么你可以使用std::hex格式标志。 E.g:

long rem = 16;
std::cout << std::hex << rem << std::endl; //prints 10

Live Demo

答案 1 :(得分:0)

#include <iostream>
using namespace std;
int main() {
    // you have to declare variable independently when you declare different type variable
    long rem = 0;  // you typed (,)
    int hex = 0;

    cout << "enter the number to convert ";
    cin >> rem;

    hex = rem / 16;

    while (rem > 0)
    {
        rem = rem % 16; // after this, rem is lower then 16 (remain operator)
        hex = hex + rem;
        cout << hex << "" << rem << endl;
        rem = rem / 16; // so rem must be 0 because rem is lower then 16
    }

    return 0;
}

实际上,即使我修复了你的问题问题,你的代码也不能正常工作,但这就是你的循环运行一次的原因。

答案 2 :(得分:0)

问题在于

{
    rem = rem % 16;
    ...
    rem = rem / 16;
}

rem = rem % 16之后,rem包含的数字在以下范围内:[0,16]。然后使用整数除法将此数字除以16,得到0