当前位置:网站首页>利用栈来实现二进制转化为十进制
利用栈来实现二进制转化为十进制
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;
}
边栏推荐
- Sign up now | oar hacker marathon phase III midsummer debut, waiting for you to challenge
- Ctfhub -web SSRF summary (excluding fastcgi and redI) super detailed
- sql-lab (54-65)
- Idea 2021 Chinese garbled code
- Is it safe to open Huatai's account in kainiu in 2022?
- 110. Network security penetration test - [privilege promotion 8] - [windows sqlserver xp_cmdshell stored procedure authorization]
- 对话PPIO联合创始人王闻宇:整合边缘算力资源,开拓更多音视频服务场景
- Sonar:cognitive complexity
- NGUI-UILabel
- 即刻报名|飞桨黑客马拉松第三期盛夏登场,等你挑战
猜你喜欢
Static comprehensive experiment
静态Vxlan 配置
百度数字人度晓晓在线回应网友喊话 应战上海高考英语作文
Superscalar processor design yaoyongbin Chapter 10 instruction submission excerpt
Visual studio 2019 (localdb) \mssqllocaldb SQL Server 2014 database version is 852 and cannot be opened. This server supports version 782 and earlier
idm服务器响应显示您没有权限下载解决教程
Improve application security through nonce field of play integrity API
《通信软件开发与应用》课程结业报告
The left-hand side of an assignment expression may not be an optional property access.ts(2779)
Baidu digital person Du Xiaoxiao responded to netizens' shouts online to meet the Shanghai college entrance examination English composition
随机推荐
Apache installation problem: configure: error: APR not found Please read the documentation
Review and arrangement of HCIA
The road to success in R & D efficiency of 1000 person Internet companies
Completion report of communication software development and Application
Is it safe to open Huatai's account in kainiu in 2022?
Introduction to three methods of anti red domain name generation
NGUI-UILabel
即刻报名|飞桨黑客马拉松第三期盛夏登场,等你挑战
Typescript interface inheritance
MATLAB实现Huffman编码译码含GUI界面
Superscalar processor design yaoyongbin Chapter 9 instruction execution excerpt
110. Network security penetration test - [privilege promotion 8] - [windows sqlserver xp_cmdshell stored procedure authorization]
How much does it cost to develop a small program mall?
Basic introduction to the 16 tabs tab control in the fleet tutorial (the tutorial includes source code)
Epp+dis learning path (1) -- Hello world!
ENSP MPLS layer 3 dedicated line
让数字管理好库存
How to understand the clothing industry chain and supply chain
111.网络安全渗透测试—[权限提升篇9]—[Windows 2008 R2内核溢出提权]
Attack and defense world ----- summary of web knowledge points