在使用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