利用栈进行进制转换,二进制转换为十进制
2016-08-28 13:25
197 查看
#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) { for(int i = 0 ; i < len(p) ; i++) { printf("%d", p->a[i] ); } printf("\n"); } int top(S * p) { if( is_empty(p) ) return 0; return p->a[p->top-1]; } /*-----------------------二进制转换十进制------------------------------*/ 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 main() { S * p; p = creat(100); string s; cin>>s; cout<<BK(p , s); }
相关文章推荐
- C++利用栈进行十进制与二进制的转换
- ACCESS 如何进行二进制到六十二进制向十进制的转换?
- 如何在PB中进行位操作以及二进制与十进制转换(摘录)
- [JAVA]二进制,八进制,十六进制,十进制间进行相互转换
- 利用进位表计算十进制到二进制的转换
- 利用递归将十进制转换为二进制(c primer plus中的例题)
- java中进行二进制,八进制,十六进制,十进制间进行相互转换
- 在JAVA中二进制,八进制,十六进制,十进制间进行相互转换
- 二进制,八进制,十六进制,十进制间进行相互转换
- C#各种进制之间数据转换二进制、八进制、十进制、十六进制
- [JAVA]二进制,八进制,十六进制,十进制间进行相互转换
- [JAVA]二进制,八进制,十六进制,十进制间进行相互转换
- [JAVA]二进制,八进制,十六进制,十进制间进行相互转换
- [JAVA]二进制,八进制,十六进制,十进制间进行相互转换
- [JAVA]二进制,八进制,十六进制,十进制间进行相互转换
- 在JAVA中二进制,八进制,十六进制,十进制间进行相互转换
- java中进行二进制,八进制,十六进制,十进制间进行相互转换
- 十进制转换成二进制,十进制小数转换成二进制小数,二进制转换成十进制
- [JAVA]二进制,八进制,十六进制,十进制间进行相互转换
- [JAVA]二进制,八进制,十六进制,十进制间进行相互转换