进制转换采用除K取余法,余数用栈保存,最后全部出栈,根据出栈的数去取应该转换的数字或者字母。如果是负数则将负数转换成正数,并记flag为true,最后在输出时先判断flag是否为true,如果是的话先加一个负号。

class Solution {
public:
    /**
     * 进制转换
     * @param M int整型 给定整数
     * @param N int整型 转换到的进制
     * @return string字符串
     */
    string solve(int M, int N) {
        // write code here
        const char base[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
        bool flag = false;
        if(M < 0)
        {
            M = -1 * M;
            flag = true;
        }

        stack<int> bit_stack;
        while(M)
        {
            bit_stack.push(M%N);
            M /= N;
        }

        string rst = "";
        if(flag)
            rst = '-' + rst;

        while(!bit_stack.empty())
        {
            rst.push_back(base[bit_stack.top()]);
            bit_stack.pop();
        }

        return rst;
    }
};