十进制转二进制(顺序栈设计和应用)
设计一个顺序栈,并利用该顺序栈将给定的十进制整整数转换为二进制并输出。
函数接口定义:
#define MaxSize 100 /* 栈最大容量 */
int top; /* 栈顶指针 */
int mystack[MaxSize]; /* 顺序栈 */
/*判栈是否为空,空返回true,非空返回false */
bool isEmpty();
/* 元素x入栈 */
void Push(int x);
/* 取栈顶元素 */
int getTop();
/* 删除栈顶元素 */
void Pop();
其中 MaxSize
和 top
分别为栈的最大容量和栈顶指针。数组mystack
用来模拟顺序栈。请实现给出的isEmpty
、Push
、getTop
和Pop
这四个函数。
裁判测试程序样例:
#include <bits/stdc++.h>
using namespace std;
#define MaxSize 100 /* 栈最大容量 */
int top; /* 栈顶指针 */
int mystack[MaxSize]; /* 顺序栈 */
/*判栈是否为空,空返回true,非空返回false */
bool isEmpty();
/* 元素x入栈 */
void Push(int x);
/* 取栈顶元素 */
int getTop();
/* 删除栈顶元素 */
void Pop();
/* 十进制正整数转换为二进制 */
void dec2bin(int x) {
top = -1; /* 初始化栈顶指针 */
while (x) {
Push(x % 2);
x >>= 1;
}
while (!isEmpty()) {
int t = getTop();
Pop();
printf("%d", t);
}
printf("\n");
}
int main(int argc, char const *argv[])
{
int n;
while (scanf("%d", &n) != EOF) {
dec2bin(n);
}
return 0;
}
/* 请在这里填写答案 */
输入样例:
10
结尾无空行
输出样例:
1010
结尾无空行
Answer
/*判栈是否为空,空返回true,非空返回false */
bool isEmpty() {
if(top == -1)//如果栈顶指针是-1则没有元素为空
return true;
else
return false;
};
/* 元素x入栈 */
void Push(int x) {
if(top+1 > MaxSize) {//栈顶指针是指向栈顶元素上一个位置,则只要栈顶指针+1大于顺序栈数组最大数则栈满
printf("栈已满!");
return;
}
if(top == -1) {
mystack[++top] = x;//如果是空栈,需要让栈顶指针先加一指向0,再入栈
top++;//栈顶指针是指向栈顶元素上一个位置,则还需要再加一
}else{
mystack[top++] = x;//其他情况则只用先入栈后,栈顶指针再加一即可
}
};
/* 取栈顶元素 */
int getTop() {
return mystack[top-1];//栈顶指针减一的位置即为栈顶元素
};
/* 删除栈顶元素 */
void Pop() {
if(top == 1)
top = -1;//如果只剩一个元素,只用让栈顶指针为-1即可
else
top--;//其他情况只要栈顶指针减一即可
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律