雅虎三道面试题
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)); } }