今后继续整理算法并写出自己的理解和备注。 C++实现的:高效进制转换
1、 高效进制转换
<1> 题目描述:对一个 unsigned long 的整数,将其转换为对应的16进制数
<2> 方法一:使用数组存储数据
<3> 方法二:使用栈存储数据
<4> 方法三:使用字符串常量高效转换
源码:
一、进制转换
1、 使用数组存储数据
#include<iostream>
using namespace std;
char* Convert_16(unsigned long value)
{
static char Buffer[sizeof(unsigned long)*2+1];//9位 空间大小,静态空间自动赋0
int mod;
for(int i=sizeof(unsigned long)*2-1; i>=0; --i)//取模反向存储
{
mod = value % 16;
if(mod < 10)
{
Buffer[i] = mod + '0';
}
else
{
Buffer[i] = (mod-10) + 'A';
}
value /= 16;
}
return Buffer;
}
void main()
{
unsigned long value = 4711;
char *result = Convert_16(value);
cout<<value<<" = "<<"0x"<<result<<endl;
}
2、 使用栈存储数据 先入后出
#include<iostream>
#include<stack>
using namespace std;
void Convert_16(unsigned long value)
{
stack<char> st;.//定义栈st
int mod;
while(value != 0)
{
mod = value % 16;
if(mod < 10)
{
st.push(mod+'0');//入栈push
}
else
{
st.push((mod-10) + 'A');
}
value /= 16;
}
cout<<value<<" = "<<"0x";
while(!st.empty()) ///不为空 则出栈 出栈 pop
{
cout<<st.top();
st.pop();
}
cout<<endl;
}
void main()
{
unsigned long value = 4711;
Convert_16(value);
}
3、使用字符串常量高效转换 推荐*
#include<iostream>
#include<stack>
using namespace std;
char* Convert_16(unsigned long value)
{
static char Buffer[sizeof(unsigned long)*2+1];
for(int i=sizeof(unsigned long)*2-1; i>=0; --i)
{
Buffer[i] = "0123456789ABCDEF"[value%16];/////字符串常量,模直接对应数组的值去存入,把模的结果当做下标,余数为3则存入3;
value /= 16;
}
return Buffer;
}
void main()
{
unsigned long value = 4711;
char *result = Convert_16(value);
cout<<value<<" = "<<"0x"<<result<<endl;
}