当前位置:网站首页>利用栈来实现二进制转化为十进制
利用栈来实现二进制转化为十进制
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;
}边栏推荐
- Ctfhub -web SSRF summary (excluding fastcgi and redI) super detailed
- ES底层原理之倒排索引
- 防红域名生成的3种方法介绍
- 112.网络安全渗透测试—[权限提升篇10]—[Windows 2003 LPK.DDL劫持提权&msf本地提权]
- Epp+dis learning road (2) -- blink! twinkle!
- Is it safe to open Huatai's account in kainiu in 2022?
- Tutorial on principles and applications of database system (010) -- exercises of conceptual model and data model
- wallys/Qualcomm IPQ8072A networking SBC supports dual 10GbE, WiFi 6
- 数据库系统原理与应用教程(008)—— 数据库相关概念练习题
- sql-lab (54-65)
猜你喜欢

Fleet tutorial 14 basic introduction to listtile (tutorial includes source code)

Superscalar processor design yaoyongbin Chapter 8 instruction emission excerpt

@What happens if bean and @component are used on the same class?

Tutorial on the principle and application of database system (011) -- relational database

从工具升级为解决方案,有赞的新站位指向新价值

Attack and defense world ----- summary of web knowledge points

Solve server returns invalid timezone Go to ‘Advanced’ tab and set ‘serverTimezone’ property manually

Simple network configuration for equipment management

"Series after reading" my God! It's so simple to understand throttling and anti shake~
![111.网络安全渗透测试—[权限提升篇9]—[Windows 2008 R2内核溢出提权]](/img/2e/da45198bb6fb73749809ba0c4c1fc5.png)
111.网络安全渗透测试—[权限提升篇9]—[Windows 2008 R2内核溢出提权]
随机推荐
Idea 2021 Chinese garbled code
30. Feed shot named entity recognition with self describing networks reading notes
【深度学习】图像多标签分类任务,百度PaddleClas
消息队列消息丢失和消息重复发送的处理策略
EPP+DIS学习之路(2)——Blink!闪烁!
File upload vulnerability - upload labs (1~2)
Mise en œuvre du codage Huffman et du décodage avec interface graphique par MATLAB
Superscalar processor design yaoyongbin Chapter 8 instruction emission excerpt
Tutorial on the principle and application of database system (008) -- exercises on database related concepts
zero-shot, one-shot和few-shot
NGUI-UILabel
Matlab implementation of Huffman coding and decoding with GUI interface
wallys/Qualcomm IPQ8072A networking SBC supports dual 10GbE, WiFi 6
让数字管理好库存
跨域问题解决方案
ES底层原理之倒排索引
《通信软件开发与应用》课程结业报告
Unity 贴图自动匹配材质工具 贴图自动添加到材质球工具 材质球匹配贴图工具 Substance Painter制作的贴图自动匹配材质球工具
How to understand the clothing industry chain and supply chain
idea 2021中文乱码