当前位置:网站首页>利用棧來實現二進制轉化為十進制
利用棧來實現二進制轉化為十進制
2022-07-07 12:26: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;
}
边栏推荐
- [full stack plan - programming language C] basic introductory knowledge
- (待会删)yyds,付费搞来的学术资源,请低调使用!
- SQL head injection -- injection principle and essence
- Let digital manage inventory
- 从工具升级为解决方案,有赞的新站位指向新价值
- 编译 libssl 报错
- 2022 8th "certification Cup" China University risk management and control ability challenge
- Unity中SmoothStep介绍和应用: 溶解特效优化
- 问题:先后键入字符串和字符,结果发生冲突
- Learning and using vscode
猜你喜欢
Fleet tutorial 14 basic introduction to listtile (tutorial includes source code)
<No. 9> 1805. Number of different integers in the string (simple)
浅谈估值模型 (二): PE指标II——PE Band
全球首堆“玲龙一号”反应堆厂房钢制安全壳上部筒体吊装成功
Simple network configuration for equipment management
idea 2021中文乱码
ps链接图层的使用方法和快捷键,ps图层链接怎么做的
@What happens if bean and @component are used on the same class?
EPP+DIS学习之路(2)——Blink!闪烁!
Unity 贴图自动匹配材质工具 贴图自动添加到材质球工具 材质球匹配贴图工具 Substance Painter制作的贴图自动匹配材质球工具
随机推荐
idea 2021中文乱码
108.网络安全渗透测试—[权限提升篇6]—[Windows内核溢出提权]
Let digital manage inventory
解决 Server returns invalid timezone. Go to ‘Advanced’ tab and set ‘serverTimezone’ property manually
<No. 8> 1816. Truncate sentences (simple)
AirServer自动接收多画面投屏或者跨设备投屏
TypeScript 接口继承
[full stack plan - programming language C] basic introductory knowledge
ps链接图层的使用方法和快捷键,ps图层链接怎么做的
数据库系统原理与应用教程(010)—— 概念模型与数据模型练习题
平安证券手机行开户安全吗?
Several methods of checking JS to judge empty objects
Up meta - Web3.0 world innovative meta universe financial agreement
Simple network configuration for equipment management
Rationaldmis2022 advanced programming macro program
【深度学习】图像多标签分类任务,百度PaddleClas
[data clustering] realize data clustering analysis based on multiverse optimization DBSCAN with matlab code
《通信软件开发与应用》课程结业报告
Will the filing free server affect the ranking and weight of the website?
Present pod information to the container through environment variables