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; }
|
输入样例:
输出样例:
其实这题要我们写的代码逻辑不是进制转换的,而是进栈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) { return ERROR; } s.data[s.top] = x; 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; }
|