PTA(栈和队列)1-2 进制转换

1-2 进制转换

分数 4

作者 YJ

单位 西南石油大学

设计一个顺序栈,并利用该顺序栈将给定的十进制整整数转换为二进制输出。

函数接口定义:

1
2
Status SPush( SqStack &s,ElemType x);
Status SPop( SqStack &s,int &e );

裁判测试程序样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <stdio.h>
#include <stdlib.h>

#define MaxSize 10
#define OK 1
#define ERROR 0
typedef int Status;
typedef int ElemType;

typedef struct{
ElemType *data; //存储元素的数组
int top; //栈顶指针
int stacksize; //栈最大容量
}SqStack;

void CreateStack(SqStack &s)
{
s.data= (ElemType *)malloc(MaxSize*sizeof(ElemType));
s.top=0;
s.stacksize=MaxSize;
}

Status SPush( SqStack &s, ElemType x );
Status SPop( SqStack &s,int &e );

int main()
{
SqStack s;
int N,e;
CreateStack(s);
scanf("%d", &N);
while (N) {
if(SPush(s,N%2))
N=N/2;
else{
printf("stack is overflow!\n");
return 0;
}
}
while(SPop(s,e))
printf("%d",e);
printf("\n");
return 0;
}
/* 请在这里填写答案 */

输入样例:

1
1023

输出样例:

1
1111111111

其实这题要我们写的代码逻辑不是进制转换的,而是进栈SPush和出栈SPop的逻辑,进制转换的代码逻辑已经在题目中的main中写好了

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Status SPush( SqStack &s, ElemType x ) {
if (s.top == s.stacksize) { // 栈满了,返回ERROR
return ERROR;
}
s.data[s.top] = x; // 将x入栈到top处,因为top从0开始
s.top++; // 栈顶指针往上移动
return OK;
}

Status SPop( SqStack &s,int &e ) {
if (s.top == 0) { // 栈为空,不能再返回
return ERROR;
}
s.top--;
e = s.data[s.top];
return OK;
}