在使用stack实现进制转换之前,你首先得知道进制转换的算法是怎么样的,可能有些同学还不清楚进制转换是个什么操作。。下面我以10进制的75转换成8进制为例:

看到这里应该就知道啥时进制转换了。现在用算法来描述:
首先我们可以使用数组的下标定义一个映射:

直接用代码就是 string d2c = "0 1 2 3 4 5 6 7 8 9 A B C D E F";
然后我们就可以开始使用stack来进行操作了:
#include<iostream>
#include<stack>
using namespace std;
int main()
{
stack <char> s;
string d2c = "012345678910ABCDE";
int num; //我们要转换的对象
int b; //转换成b进制
string result = "";
if(num < 0) //如果是负数,直接操作一下
{
result += "-";
num = -num;
}
do {
s.push(d2c[num % b]); //将数组下标转换成字符
num /= b;
}while(num != 0) //用do-while的原因是要考虑0
while(!s.empty()) {
result += s.top(); //取出栈顶元素,然后pop掉
s.pop()
}
cout << result << endl; //最后就得到了result,应该看一遍就会了
return 0;
}






Comments NOTHING