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