用字符串表示十进制数

不使用printf,将十进制数以二进制和十六进制的形式输出
问题
如果不能使用printf系列库函数,我们可以通过位运算得到这个十进制数的二进制和十六进制形式的字符串,再将字符串打印。
代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//得到二进制形式的字符串
char *get2String(long num)
{
    int i=0;
    char* buffer;
    char* temp;
    buffer = (char*)malloc(33);
    temp=buffer;//temp
    for(i =0;i<32;i++)
    {
        temp[i] =num&(1<<(31-i));
        temp[i] =temp[i]>>(31-i);
        temp[i] =(temp[i]==0)?'0':'1';
    }
    buffer[32]='\0';
    return buffer;
}
char *get16String(long num)
{
    int i =0;
    char *buffer=(char*)moalloc(11);
    char *temp;
    buffer[0]='0';
    buffer[1]='x';
    buffer[10]='\0';
    temp = buffer+2;
    for(i =0;i<8;i++)
    {
        temp[i]=(char)(num<<4 * i>>28);
        temp[i]=temp[i]>=0?temp[i]:temp[i]+16;
        temp[i]=temp[i]<10?temp[i]+48:temp[i]+55;
    }
    return buffer;
}
int main()
{
    char *p = NULL;
    char *q = NULL:
    int num =0;
    scanf("%d",&num);
    p = get16String(num);
    q = get2String(num);
    printf("%s\n",p);
    printf("%s\n",q);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值