C++进制转换

      关于进制转换,可以说是各大公司笔试和面试必考的一类题了,之前的腾讯笔试以及阿里的面试,都要求现场能写出进制转化的代码,在这里对各种方法作一个总结,预祝大家都能找到满意的工作!


1.最简洁的算法(递归实现)


适用情况:对输出格式不做要求,不是固定的按几位数输出


#include <iostream>
  
//十进制数转换成二进制数字
 void fun_1(int n)
 {
    if(n<2)   
        cout<<n;
    if(n>=2)  
    {
      fun_1(n/2); //fun_1(n>>1)使用移位运算科提高效率
      cout<<n%2;
    }
 }
  
//十进制数字转换成八进制数字
 void fun_2(int n)
 {
   if(n<8)   
       cout<<n;
   if(n>=8)  
   {
     fun_2(n/8);
     cout<<n%8;
   }
 }
  
//十进制数转换成十六进制数字
 void fun_3(int n)
 {
   switch(n)
   {
      case 10:   cout<<"A"; break;
      case 11:   cout<<"B"; break;
      case 12:   cout<<"C"; break;
      case 13:   cout<<"D"; break;
      case 14:   cout<<"E"; break;
      case 15:   cout<<"F"; break;
      default:   cout<<n;   
   }
 }     
  
void fun_4(int n)
 {
    if(n<16)   
        fun_3(n);
    if(n>=16)  
    {
      fun_4(n/16);
      fun_3(n%16);
    }
 }
  
//主函数
 void main()
 { 
    int n;
     cout<<"请输入n的值:  "<<endl;
     cin>>n;
     cout<<"十进制数字转换成二进制,八进制,十六进制数字结果如下:"<<endl;
     fun_1(n);        
     cout<<endl;      //输出结果换行
     fun_2(n);        
     cout<<endl;      
     fun_4(n);       
    cout<<endl;    
}

2.最实用的写法

十进制转化为二进制(想到二进制就应该反应到移位按位与运算哟!)

#include<iostream>
using std::cout;
using std::endl;
using std::cin;
//良好的习惯

char *DecToBinary(int n, char *b)
{
	//注重代码的可扩展性
	static int LEN = 8 * sizeof(int);
	for (int i = LEN - 1; i >= 0; i--, n >>= 1)
	{
		//使用移位运算可以提高效率
		b[i] = (01 & n) + '0';
	}
	b[LEN] = '\0';
	return b;
}

int main()
{
	cout << 01 << endl;
	int v[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 45636546 };
	char b[8 * sizeof(int)+1];
	int i = -1;
	while (++i < 10)
	{
		cout << DecToBinary(v[i], b) << endl;
	}
	cin.get();
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值