输入一个十进制数N,将它转换成R进制数输出。
Input 输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10)。
Output 为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。 Sample Input
7 2
23 12
-4 3
Sample Output
111
1B
-11
在C++标准中,STL被组织为下面的13个头文件:<algorithm>、<deque>、<functional>、<iterator>、<array>、<vector>、<list>、<forward_list>、<map>、<unordered_map>、<memory>、<numeric>、<queue>、<set>、<unordered_set>、<stack>和<utility>。
本题是应用了stack 模板 。
stack堆栈容器
堆栈是一个线性表,插入和删除只在表的一端进行。这一端称为栈顶(Stack Top),另一端则为栈底(Stack Bottom)。堆栈的元素插入称为入栈,元素的删除称为出栈。由于元素的入栈和出栈总在栈顶进行,因此,堆栈是一个后进先出(Last In First Out)表,即 LIFO 表。
C++ STL 的堆栈泛化是直接通过现有的序列容器来实现的,默认使用双端队列deque的数据结构,当然,可以采用其他线性结构(vector 或 list等),只要提供堆栈的入栈、出栈、栈顶元素访问和判断是否为空的操作即可。由于堆栈的底层使用的是其他容器,因此,堆栈可看做是一种适配器,将一种容器转换为另一种容器(堆栈容器)。
为了严格遵循堆栈的数据后进先出原则,stack 不提供元素的任何迭代器操作,因此,stack 容器也就不会向外部提供可用的前向或反向迭代器类型。
stack堆栈容器的C++标准头文件为 stack ,必须用宏语句 "#include <stack>" 包含进来,才可对 stack 堆栈的程序进行编译。
创建 stack 对象
使用堆栈前,先要利用构造函数进行初始化,创建一个堆栈对象,以进行元素的入栈、出栈等操作。
1. stack()
默认构造函数,创建一个空的 stack 对象。
例如,下面一行代码使用默认的 deque 为底层容器,创建一个空的堆栈对象 s 。
stack<int> s;
2. stack(const stack&)
复制构造函数,用一个 stack 堆栈创建一个新的堆栈。
例如,下面的代码利用 s1 ,创建一个以双向链表为底层容器的空堆栈对象 s2 。
// stack<int, list<int> > s1;
stack<int, list<int> > s2(s1);
元素入栈
stack堆栈容器的元素入栈函数为 push 函数。由于 C++ STL 的堆栈函数是不预设大小的,因此,入栈函数就不考虑堆栈空间是否为满,均将元素压入堆栈,从而函数没有标明入栈成功与否的返回值。
如下是他的使用原型:
void push(const value_type& x)
元素出栈
stack容器的元素出栈函数为 pop 函数,由于函数并没有判断堆栈是否为空,才进行元素的弹出,因此,需要自行判断堆栈是否为空,才可执行 pop 函数。
void pop()
下面的示例代码,将堆栈的所有元素全部出栈
// stack<int> s;
while(!s.empty())
{
s.pop();// 出栈
}
取栈顶元素
stack容器的栈顶元素的读取函数为 pop 函数,将取出最后入栈的元素,如下是它的使用原型
value_type& top()
堆栈非空判断
随着堆栈元素不断出栈,堆栈可能会出现空的情况,因此,一般需要调用 empty 函数判断是否非空,才作元素出栈和取栈顶元素的操作。
bool empty()
判断堆栈是否为空,返回 true 表示堆栈已空,false 表示堆栈非空。
c++ stl栈stack介绍
C++ Stack(堆栈) 是一个容器类的改编,为程序员提供了堆栈的全部功能,——也就是说实现了一个先进后出(FILO)的数据结构。
c++ stl栈stack的头文件为:
#include <stack>
c++ stl栈stack的成员函数介绍
操作 比较和分配堆栈
empty() 堆栈为空则返回真
pop() 移除栈顶元素
push() 在栈顶增加元素
size() 返回栈中元素数目
top() 返回栈顶元素
代码实现:
#include<cstdio>
#include<iostream>
#include<stack>
void transformn(int n,int m);
using namespace std;
int main()
{
int figure ,d ;
while(scanf("%d%d",&figure,&d)!=EOF)
{transformn(figure,d);
printf("\n");
}
return 0;
}
void transformn(int n,int b)
{
int i;
int k=n;
stack<int >mystack;
if(n!=0){
if(n<0)
n=-n;
while(n) // 进栈
{
mystack.push(n%b) ;//先入的为栈底,后出栈
n/=b;
}
if(k<0)
printf("-");
while(!mystack.empty()) //出栈
{
i = mystack.top(); //栈顶元素 赋值给i
if(i>=10&&b>10)
{
printf("%c",i+'A'-10);
mystack.pop() ;
}// 把栈顶元素出栈(踢出去)
else
{
mystack.pop() ;
printf("%d",i);
}
}
}
else
{
printf("0");
}
}
标签:容器,转换,进制,STL,元素,栈顶,堆栈,出栈,stack From: https://blog.51cto.com/u_15970235/6068593