134 编程实现:把十进制数(long 型)分别以二进制和十六进制形式输出,不能使用 printf系列

来源:互联网 发布:在淘宝天猫买药靠谱吗 编辑:程序博客网 时间:2024/05/16 18:32

雅虎三道面试题
34、编程实现:把十进制数(long 型)分别以二进制和十六进制形式输出,不能使用 printf 系

/*34、编程实现:把十进制数(long 型)分别以二进制和十六进制形式输出,不能使用 printf 系列实现了int型的转换,4个字节,32位 */#include<iostream>#include<stdio.h>using namespace std;// 十进制转换为二进制,十进制数的每1bit转换为二进制的1位数字char* tenToBin(unsigned int data)//无符号 否则会出现-1 {    int bitNum=sizeof(int)*8;    char* pBin =new char[bitNum+1];//返回字符型指针     pBin[bitNum]='\0';        for (int i=0;i<bitNum;++i)    {        pBin[i]=data<<i>>(bitNum-1);        if (pBin[i]==0)            pBin[i]='0';        else if(pBin[i]==1)            pBin[i]='1';        else            pBin[i]='a';    }    return pBin;}// 十进制转换为十六进制,十进制数的每4bit转换为十六进制的1位数字char* tenToHex(unsigned int data){    int bitNum =sizeof(int)*8;    char *pHex = new char[sizeof(int)*8/4+3];    pHex[0]='0';    pHex[1]='x';    pHex[bitNum/4+2]='\0';    char *pTmp=pHex + 2;        for (unsigned int i=0;i<bitNum/4; ++i)    {        pTmp[i] = data<< (4*i) >> (bitNum-4);        if (pTmp[i]>=0 && pTmp[i]<=9)            pTmp[i]+='0';        else if (pTmp[i]>=10 && pTmp[i]<=15)            pTmp[i] =pTmp[i]-10 +'A';    }    return pHex;}int main(){int a;while(scanf("%d",&a),a){printf("%d(十进制)\n",a); printf("用二进制表示:%s\n",tenToBin(a));printf("用十六进制表示:%s\n",tenToHex(a));}}


0 0
原创粉丝点击