[PTA] 长整数转化为16进制

这题是参考了论坛里许多的老师的方法,才写的容易理解的方法,谢谢各位老师的分享。

个人理解,有错欢迎指出。

题目

方法

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--;
        }
    }
}

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值