进制转换

进制转换

通过模N除N可以按N进制一位一位取下来,并去arr里面找对应的字符串加起来。

需要考虑到M为负数的情况,M为0的情况。

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

static string arr = "0123456789ABCDEF";
int main()
{
    long M;
    int N;
    while(cin >> M >> N) // 多组输入
    {
        bool flag = true; // 默认为正
        if(M < 0) // M为负数时,需要将M变为正数这样去取模时才不会出错
            flag = false, M = -M; 
        string ret;

        while(M)
        {
            int tmp = M % N;
            M = M / N;
            ret += arr[tmp]; // 倒着加上去的 最后再翻转回来
        }
        if(ret == "") // 说明while没有进去 也就是M是0
            ret += "0";
        if(flag == false) // 考虑负数 同样先加到后面再逆置回来
            ret += "-";
        reverse(ret.begin(), ret.end());
        cout << ret << endl;
    }
    return 0;
}