利用栈实现二进制转换为八、十、十六进制
来源:互联网 发布:创意马克杯 知乎 编辑:程序博客网 时间:2024/05/01 03:15
#include <iostream>#include <stdio.h>#include <stdlib.h>using namespace std;/*-----------------------------栈的建立-------------------------------*/typedef struct Stack{ int * a; int base; //栈低 int top; //栈顶 int n; //栈的长度 }S;S * creat(int n); //创建一个栈bool is_empty(S * p); //判断栈是否为空bool push(S * p , int i); //进栈int pop(S * p); //出栈bool is_full(S * p); //判断是否满int len(S * p); //求栈的长度void show(S * p); //输出栈int top(S * p); //显示栈顶元素S * creat(int i){ S * p; p = (S *)malloc(sizeof(S)); p->a = new int[i]; p->n = i; p->base = p->top = 0; return p;}int len(S * p){ return p->top - p->base;}bool is_empty(S * p){ if( len( p ) ) return false; else return true;}bool is_full(S * p){ if( p->top < p->n ) return false; else return true;}bool push(S * p , int i){ if( is_full(p) ) return false; p->a[p->top] = i; p->top ++; return true;}int pop(S * p){ if( is_empty(p) ) return 0; int k = p->a[p->top - 1]; p->top --; return k;}void show(S * p){ while( !is_empty(p) ) { printf("%d" , pop(p) ); } printf("\n");}int top(S * p){ if( is_empty(p) ) return 0; return p->a[p->top-1];}void showP(S * p){ while( !is_empty(p) ) { if( top(p) > 9 ) printf("%c",'A' + ( top(p) - 10 ) ); else printf("%d",top(p)); pop(p); } printf("\n");}/*-----------------------二进制转换十进制------------------------------*/int int_pow(int x , int y){ int sum = 1; for(int i = 1 ; i <= y ; i++) { sum = sum * x; } return sum;}bool er(string s){ int len = s.length(); int k = 0; for(int i = 0 ; i < len ; i++ ) //判断每位是否有大于2的数 { if( 2 > (s[i] - '0') ) k++; } if( k != len ) return false; else return true; }int BK(S * p , string s) // BK 函数是二进制转化为十进制数的函数 s 是二进制数{ if( !er(s) ) { return 0; printf("您输入的不是二进制数!"); } int k = 0 ; for(int i = 0 ; i < s.length() ; i++) { if( s[i] == '0' ) k++; else break; } for(int i = k ; i < s.length() ; i++ ) push( p , (s[i] - '0') ); int sum = 0 ,l = len(p); for(int i = 0 ; i < l ; i++) { sum += pop(p)*int_pow(2,i); } return sum;}int BG(S * p , string s) //二进制转换为八进制{ if( !er(s) ) { return 0; printf("您输入的不是二进制数!"); } int k = 0 ; for(int i = 0 ; i < s.length() ; i++) { if( s[i] == '0' ) k++; else break; } for(int i = k ; i < s.length() ; i++ ) push( p , (s[i] - '0') ); S * q = creat(100); int i , j , l ,jl , sum , kk = len(p); int a[3]; for( i = 0 ; i < kk ; ) { sum = 0; for(j = i , jl = 0 ; j < kk , jl < 3 ; j++ , jl++ ) { a[jl] = pop(p); } if( jl!=2 ) { for( l = jl ; l <= 2 ; l++) { a[jl] == 0; } } for(int ll = 0 ; ll < 3 ; ll++) { sum += a[ll]*int_pow(2,ll); } push( q , sum ); i = j; } show(q);}int BP(S * p , string s) //二进制转换为十进制 { if( !er(s) ) { return 0; printf("您输入的不是二进制数!"); } int k = 0 ; for(int i = 0 ; i < s.length() ; i++) { if( s[i] == '0' ) k++; else break; } for(int i = k ; i < s.length() ; i++ ) push( p , (s[i] - '0') ); S * q = creat(100); int i , j , l ,jl , sum , kk = len(p); int a[4]; for( i = 0 ; i < kk ; ) { sum = 0; for(j = i , jl = 0 ; j < kk , jl < 4 ; j++ , jl++ ) { a[jl] = pop(p); } if( jl!=3 ) { for( l = jl ; l <= 3 ; l++) { a[jl] == 0; } } for(int ll = 0 ; ll < 4 ; ll++) { sum += a[ll]*int_pow(2,ll); } push( q , sum ); i = j; } showP(q); }int main(){ S * p; p = creat(100); string s; cin>>s; BP(p , s);}
0 0
- 利用栈实现二进制转换为八、十、十六进制
- 八、十、十六进制转换
- 利用栈实现二进制转换十六进制的完整C代码
- 利用栈实现二进制转换为十进制
- 十六进制转换为二进制
- 二进制转换为十六进制
- 二,八,十,十六进制转换
- 二、八、十、十六进制转换
- 机算机二,八,十,十六进制转换
- 二、八、十、十六进制转换
- 蓝桥杯 八、十、十六进制转换
- 二、八、十、十六进制转换
- 二进制及十、八、十六进制数
- 汇编语言 十六进制转换为二进制
- 代码实现十进制转换为二进制、十六进制(源码)
- 文字转换为二进制/十六进制(Uncode编码 java实现)
- EXCEL用函数将二进制数转为八、十、十六进制,进制转换
- 171023—各进制数输出:二进制转换&用格式控制符输出八,十,十六进制数
- Asia Dhaka 2013
- gin框架
- 用js在页面上,设置多个按钮,点击当前按钮时,当前按钮文字变为“哈哈”,其他未点击的按钮文字变为“呜呜”。
- UVa OJ 1451 - Average
- iOS开发网络篇—实现一个视频播放客户端小应用(二)
- 利用栈实现二进制转换为八、十、十六进制
- JSP脚本元素、指令元素、动作元素
- windows下pytesseract识别验证码遇到的WindowsError: [Error 2] 的解决方法
- hdu5723 最小生成树 树形dp
- Apache 安全配置方法
- Linux下逻辑地址-线性地址-物理地址图解
- 一个极端的前端国际化方法
- 曲线拟合
- android小技巧