当前位置:网站首页>利用栈来实现二进制转化为十进制
利用栈来实现二进制转化为十进制
2022-07-07 10:27:00 【舍不得,放不下】
如何实现二进制转化为十进制呢?
举个栗子吧:比如(100101)2(这个2是下标哈)转化为十进制的方法:
1*2^0+0*2^1+1*2^2+0*2^3+0*2^4+1*2^5
知道这个接下来就好办了:100101入栈顺序1->0->0->1->0->1
废话不多数,直接上代码
先用结构体定义一个栈:
typedef struct {
ElemType *base;
ElemType *top;
int stacksize;
} sqstack;
初始化栈:
void InitStack(sqstack *s) { //初始化栈
s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType)); //malloc申请空间,
if (!s->base) { //如果申请失败
exit(0);
}
s->top = s->base; //栈顶等于栈底
s->stacksize = STACK_INIT_SIZE;
}
插入(压栈)操作:
void Push(sqstack*s, ElemType e) { //插入操作(压栈)
if (s->top - s->base >= s->stacksize) {//如果栈溢出
s->base = (ElemType*)realloc(s->base, (s->stacksize + STACKINCREMENT) * sizeof(ElemType));//realloc申请空间,将原有数据保存,并添加新的空间,来找新的一份空间储存数据
if (!s->base) {
exit(0);
}
}
*(s->top) = e;//栈顶赋值
s->top++;//栈顶+1
}
抛出(出栈)操作:
void Pop(sqstack*s, ElemType*e) {//抛出操作
if (s->top == s->base) {
return;
}
*e = *--(s->top);
}
计算栈的长度:
int StackLen(sqstack s) {//计算栈的长度
return (s.top - s.base);
}
主函数:
int main() {
ElemType c;
sqstack s;
int len, sum = 0;
InitStack(&s);
printf("请输入二进制数,输入#符号表示结束!\n");
scanf("%c", &c);
while (c != '#') {
Push(&s, c);
scanf("%c", &c);
}
getchar();//吸收空格
len = StackLen(s);
printf("栈的当前容量是:%d\n", len);
for (int i = 0; i < len; i++) {
Pop(&s, &c);
sum = sum + ((c - 48) << i);//c-48由ascll码表转化为整形,(c-48)<<i位运算相当于2^i
}
printf("转化的十进制数是:%d\n", sum);
return 0;
}
整个代码:
#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 20
#define STACKINCREMENT 10
typedef char ElemType;
typedef struct {
ElemType *base;
ElemType *top;
int stacksize;
} sqstack;
void InitStack(sqstack *s) { //初始化栈
s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType)); //malloc申请空间,
if (!s->base) { //如果申请失败
exit(0);
}
s->top = s->base; //栈顶等于栈底
s->stacksize = STACK_INIT_SIZE;
}
void Push(sqstack*s, ElemType e) { //插入操作(压栈)
if (s->top - s->base >= s->stacksize) {//如果栈溢出
s->base = (ElemType*)realloc(s->base, (s->stacksize + STACKINCREMENT) * sizeof(ElemType));//realloc申请空间,将原有数据保存,并添加新的空间,来找新的一份空间储存数据
if (!s->base) {
exit(0);
}
}
*(s->top) = e;//栈顶赋值
s->top++;//栈顶+1
}
void Pop(sqstack*s, ElemType*e) {//抛出操作
if (s->top == s->base) {
return;
}
*e = *--(s->top);
}
int StackLen(sqstack s) {//计算栈的长度
return (s.top - s.base);
}
int main() {
ElemType c;
sqstack s;
int len, sum = 0;
InitStack(&s);
printf("请输入二进制数,输入#符号表示结束!\n");
scanf("%c", &c);
while (c != '#') {
Push(&s, c);
scanf("%c", &c);
}
getchar();//吸收空格
len = StackLen(s);
printf("栈的当前容量是:%d\n", len);
for (int i = 0; i < len; i++) {
Pop(&s, &c);
sum = sum + ((c - 48) << i);//c-48由ascll码表转化为整形,(c-48)<<i位运算相当于2^i
}
printf("转化的十进制数是:%d\n", sum);
return 0;
}
边栏推荐
- HCIA复习整理
- 2022 年第八届“认证杯”中国高校风险管理与控制能力挑战赛
- 问题:先后键入字符串和字符,结果发生冲突
- What are the technical differences in source code anti disclosure
- <No. 9> 1805. 字符串中不同整数的数目 (简单)
- In the small skin panel, use CMD to enter the MySQL command, including the MySQL error unknown variable 'secure_ file_ Priv 'solution (super detailed)
- Unity中SmoothStep介绍和应用: 溶解特效优化
- 消息队列消息丢失和消息重复发送的处理策略
- Completion report of communication software development and Application
- Apache installation problem: configure: error: APR not found Please read the documentation
猜你喜欢
HCIA复习整理
[data clustering] realize data clustering analysis based on multiverse optimization DBSCAN with matlab code
Upgrade from a tool to a solution, and the new site with praise points to new value
浅谈估值模型 (二): PE指标II——PE Band
powershell cs-UTF-16LE编码上线
从工具升级为解决方案,有赞的新站位指向新价值
<No. 9> 1805. Number of different integers in the string (simple)
百度数字人度晓晓在线回应网友喊话 应战上海高考英语作文
Several methods of checking JS to judge empty objects
ps链接图层的使用方法和快捷键,ps图层链接怎么做的
随机推荐
How to understand the clothing industry chain and supply chain
Let digital manage inventory
SQL blind injection (WEB penetration)
Superscalar processor design yaoyongbin Chapter 10 instruction submission excerpt
关于 Web Content-Security-Policy Directive 通过 meta 元素指定的一些测试用例
Simple network configuration for equipment management
Epp+dis learning road (2) -- blink! twinkle!
【深度学习】图像多标签分类任务,百度PaddleClas
Fleet tutorial 15 introduction to GridView Basics (tutorial includes source code)
Up meta - Web3.0 world innovative meta universe financial agreement
What is a LAN domain name? How to parse?
Attack and defense world - PWN learning notes
Unity中SmoothStep介绍和应用: 溶解特效优化
idm服务器响应显示您没有权限下载解决教程
SQL lab 26~31 summary (subsequent continuous update) (including parameter pollution explanation)
Visual Studio 2019 (LocalDB)\MSSQLLocalDB SQL Server 2014 数据库版本为852无法打开,此服务器支持782版及更低版本
<No. 9> 1805. Number of different integers in the string (simple)
什么是局域网域名?如何解析?
Detailed explanation of debezium architecture of debezium synchronization
UP Meta—Web3.0世界创新型元宇宙金融协议