这题是参考了论坛里许多的老师的方法,才写的容易理解的方法,谢谢各位老师的分享。
个人理解,有错欢迎指出。
题目
方法
void f(long int x,char *p)
{
int i=0,a,right,left,t;
if (x==0)
*p='0'; /*当输入的长整数为0,那么十六进制也为0*/
else{
if (x<0){
p[i]='-';
i++;
x=-x; /*如果是负数,把负号先存起来,然后对长整数进行转化*/
}
while (x>0){
a=x%16; /*不知道具体位数时,每次取最后一位进行转化,较为方便*/
if (a>=0&&a<=9){
p[i]=a+48;
i++;
}
else {
p[i]=a+55; /*ASCII码表中a是65,当余数大于9也就是从10开始转为a到f,所以转化就只要加上55就行了*/
i++;
}
x/=16;
}
i-=1;
right=i;
left=0;
if (p[0]=='-')
left=1;
while (left<=right){ /*因为从最后一位开始转化,所以转化完后要倒置回来*/
t=p[left];
p[left]=p[right];
p[right]=t;
left++;
right--;
}
}
}