利用栈实现二进制转换为八、十、十六进制

来源:互联网 发布:创意马克杯 知乎 编辑:程序博客网 时间: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
原创粉丝点击