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