#include<iostream>
#include<stack>
#include<string>
using namespace std;
void Multioutput(int num,int b)
{
string numlist="0123456789ABCDEF";
stack<char>st;
while(num)
{
st.push(numlist[num%b]);
num=num/b;
}
while(!st.empty())
{
cout<<st.top();
st.pop();
}
cout<<endl;
}
int main()
{
int num=123;
int b;
while(cin>>b&&b)
{
Multioutput(num,b);
}
return 0;
}
关于栈中为什么pop元素没有返回值,而是使用top来返回元素的值,这里要做一下说明,如果pop返回栈顶部的元素,如果按值返回则会调用复制构造函数,从而造成很大的开销。而按引用返回,则必须将该元素存储到动态内存中,因为pop要将元素删除,如果不另开辟内存是不行的,但是除非开辟的动态内存最后被删除,否则会造成内存泄露。