新建一个数组,根据正负性确定数组首元素是否为’-‘,然后依次取得转换进制后的数的末位,依次存入数组中,最后将数组反转(负号不反)即可。
#include<stdbool.h>
#include<string.h>
char* solve(int M, int N ) {
   if(M == 0)
       return "0";
    char jz[16] = "0123456789ABCDEF";  //新数组中数的取值范围
    char* ret = (int*)malloc(sizeof(int)* 32);  //由题意即使最大数10^8用
                                               //最小的进制2表示,也不会超过32位
    int i = 0, M1 = M;  //最好不直接对原数进行操作,而是用替身,原数后面有用处,不能随意改
    if(M1 < 0){
       ret[0] = '-';  //有负数的情况
       i = 1;
       M1 = -M;   //操作时就不带负号了
    }
    while(M1 > 0){
        ret[i++] = jz[M1 % N];  //取末位
        M1 = M1 / N;
    }
    int j = 0, k = i-1;
    if(M < 0)  //确定反转的起始边界是0还是1
        j = 1;
    while(j < k){  //反转
        int tmp = ret[j];
        ret[j] = ret[k];
        ret[k] = tmp;
        j++; k--;
    }
    return ret;
}