当前位置:网站首页>利用栈来实现二进制转化为十进制
利用栈来实现二进制转化为十进制
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;
}
边栏推荐
- 顶级域名有哪些?是如何分类的?
- Attack and defense world ----- summary of web knowledge points
- 数据库系统原理与应用教程(010)—— 概念模型与数据模型练习题
- 《通信软件开发与应用》课程结业报告
- SQL Lab (36~40) includes stack injection, MySQL_ real_ escape_ The difference between string and addslashes (continuous update after)
- 跨域问题解决方案
- Tutorial on principles and applications of database system (007) -- related concepts of database
- powershell cs-UTF-16LE编码上线
- 2022年在启牛开华泰的账户安全吗?
- NGUI-UILabel
猜你喜欢
(to be deleted later) yyds, paid academic resources, please keep a low profile!
数据库系统原理与应用教程(010)—— 概念模型与数据模型练习题
idea 2021中文乱码
An error occurred when vscade tried to create a file in the target directory: access denied [resolved]
跨域问题解决方案
Solve server returns invalid timezone Go to ‘Advanced’ tab and set ‘serverTimezone’ property manually
112.网络安全渗透测试—[权限提升篇10]—[Windows 2003 LPK.DDL劫持提权&msf本地提权]
Hi3516 full system type burning tutorial
Processing strategy of message queue message loss and repeated message sending
zero-shot, one-shot和few-shot
随机推荐
SQL lab 1~10 summary (subsequent continuous update)
gcc 编译报错
110. Network security penetration test - [privilege promotion 8] - [windows sqlserver xp_cmdshell stored procedure authorization]
110.网络安全渗透测试—[权限提升篇8]—[Windows SqlServer xp_cmdshell存储过程提权]
DOM parsing XML error: content is not allowed in Prolog
Zero shot, one shot and few shot
Completion report of communication software development and Application
Common locking table processing methods in Oracle
Sign up now | oar hacker marathon phase III midsummer debut, waiting for you to challenge
<No. 8> 1816. 截断句子 (简单)
Up meta - Web3.0 world innovative meta universe financial agreement
Visual Studio 2019 (LocalDB)\MSSQLLocalDB SQL Server 2014 数据库版本为852无法打开,此服务器支持782版及更低版本
ps链接图层的使用方法和快捷键,ps图层链接怎么做的
Sonar:Cognitive Complexity认知复杂度
112.网络安全渗透测试—[权限提升篇10]—[Windows 2003 LPK.DDL劫持提权&msf本地提权]
Tutorial on principles and applications of database system (007) -- related concepts of database
SQL blind injection (WEB penetration)
【玩转 RT-Thread】 RT-Thread Studio —— 按键控制电机正反转、蜂鸣器
【深度学习】图像多标签分类任务,百度PaddleClas
Apache installation problem: configure: error: APR not found Please read the documentation