新建一个数组,根据正负性确定数组首元素是否为’-‘,然后依次取得转换进制后的数的末位,依次存入数组中,最后将数组反转(负号不反)即可。
#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;
}

京公网安备 11010502036488号