现在的位置: 首页 > 综合 > 正文

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

2018年01月19日 ⁄ 综合 ⁄ 共 968字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.