当前位置:网站首页>利用栈来实现二进制转化为十进制
利用栈来实现二进制转化为十进制
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;
}
边栏推荐
- Superscalar processor design yaoyongbin Chapter 8 instruction emission excerpt
- [data clustering] realize data clustering analysis based on multiverse optimization DBSCAN with matlab code
- Attack and defense world ----- summary of web knowledge points
- Matlab implementation of Huffman coding and decoding with GUI interface
- How to connect 5V serial port to 3.3V MCU serial port?
- 2022 年第八届“认证杯”中国高校风险管理与控制能力挑战赛
- 解密GD32 MCU产品家族,开发板该怎么选?
- 跨域问题解决方案
- 【玩转 RT-Thread】 RT-Thread Studio —— 按键控制电机正反转、蜂鸣器
- Idea 2021 Chinese garbled code
猜你喜欢
[full stack plan - programming language C] basic introductory knowledge
<No. 8> 1816. 截断句子 (简单)
RHSA first day operation
(待会删)yyds,付费搞来的学术资源,请低调使用!
MATLAB實現Huffman編碼譯碼含GUI界面
千人规模互联网公司研发效能成功之路
【深度学习】图像多标签分类任务,百度PaddleClas
SQL Lab (46~53) (continuous update later) order by injection
Hi3516全系统类型烧录教程
盘点JS判断空对象的几大方法
随机推荐
zero-shot, one-shot和few-shot
Solve server returns invalid timezone Go to ‘Advanced’ tab and set ‘serverTimezone’ property manually
Superscalar processor design yaoyongbin Chapter 10 instruction submission excerpt
SQL head injection -- injection principle and essence
Attack and defense world ----- summary of web knowledge points
SQL Lab (46~53) (continuous update later) order by injection
30. Feed shot named entity recognition with self describing networks reading notes
College entrance examination composition, high-frequency mention of science and Technology
问题:先后键入字符串和字符,结果发生冲突
源代码防泄密中的技术区别再哪里
110. Network security penetration test - [privilege promotion 8] - [windows sqlserver xp_cmdshell stored procedure authorization]
Unity map auto match material tool map auto add to shader tool shader match map tool map made by substance painter auto match shader tool
Visual studio 2019 (localdb) \mssqllocaldb SQL Server 2014 database version is 852 and cannot be opened. This server supports version 782 and earlier
<No. 9> 1805. 字符串中不同整数的数目 (简单)
111.网络安全渗透测试—[权限提升篇9]—[Windows 2008 R2内核溢出提权]
Introduction and application of smoothstep in unity: optimization of dissolution effect
108. Network security penetration test - [privilege escalation 6] - [windows kernel overflow privilege escalation]
SQL lab 26~31 summary (subsequent continuous update) (including parameter pollution explanation)
【深度学习】图像多标签分类任务,百度PaddleClas
《通信软件开发与应用》课程结业报告