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