思路:累除,从16进制的个位开始得到。因此从数组s的末位下标9开始,逐个往前填。最后再把填的元素 提到下标0开始的位置。
void f (long int x, char *p)
{
if (x<0){
*p = '-';
p++;
x = -1*x;
}
if (x == 0)
*p = '0'; // 以上先处理一下非正的情况
int m,cnt=0;
while (x != 0){
m = x%16;
x /= 16;
if (m < 10)
*(p+MAXN-1-cnt) = m+'0'; // 转换成数字 并填入数组 s
else
*(p+MAXN-1-cnt) = m-10+'A'; // 转换成字母 并填入
cnt++; // cnt是填了多少个
}
int i, len=MAXN-cnt; // len是空了多少个
for (i=0; i<cnt; i++){
*(p+i) = *(p+len+i); // 把填入数组 s里的元素,提到前面来
*(p+len+i) = '\0'; // 提到前面以后,原来的归零
}
}