在使用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;
}
立志成为一名攻城狮
最后更新于 2020-03-12