Bin To Dec (十进制)
#include <stdio.h>
#include <stdlib.h>
#include <math.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) ) ;
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) ) ;
if ( ! s-> base )
{
exit ( 0 ) ;
}
}
* ( s-> top) = e;
s-> top++ ;
}
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, i, 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 ( i= 0 ; i < len; i++ )
{
Pop ( & s, & c) ;
sum = sum + ( c- 48 ) * pow ( 2 , i) ;
}
printf ( "转化为十进制数是: %d\n" , sum) ;
return 0 ;
}
Bin To Hex (十六进制)
#include <stdio.h>
#include <stdlib.h>
#include <math.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) ) ;
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) ) ;
if ( ! s-> base )
{
exit ( 0 ) ;
}
s-> top = s-> base + s-> stackSize;
s-> stackSize = s-> stackSize + STACKINCREMENT;
}
* ( s-> top) = e;
s-> top++ ;
}
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 s1;
sqStack s2;
int len, i, j, sum = 0 ;
InitStack ( & s1) ;
printf ( "请输入二进制数,输入‘#’号表示结束!\n\n" ) ;
scanf ( "%c" , & c) ;
while ( c != '#' )
{
if ( c== '0' || c== '1' )
Push ( & s1, c) ;
scanf ( "%c" , & c) ;
}
getchar ( ) ;
len = StackLen ( s1) ;
InitStack ( & s2) ;
for ( i= 0 ; i < len; i+ = 4 )
{
for ( j= 0 ; j < 4 ; j++ )
{
Pop ( & s1, & c ) ;
sum = sum + ( c- 48 ) * pow ( 2 , j) ;
if ( s1. base == s1. top )
{
break ;
}
}
switch ( sum )
{
case 10 : sum = 'A' ; break ;
case 11 : sum = 'B' ; break ;
case 12 : sum = 'C' ; break ;
case 13 : sum = 'D' ; break ;
case 14 : sum = 'E' ; break ;
case 15 : sum = 'F' ; break ;
default : sum + = 48 ;
}
Push ( & s2, sum ) ;
sum = 0 ;
}
printf ( "\n转化为十六进制数是: " ) ;
while ( s2. base != s2. top )
{
Pop ( & s2, & c ) ;
printf ( "%c" , c) ;
}
printf ( "(H)\n" ) ;
return 0 ;
}
Bin To Oct (八进制)
#include <stdio.h>
#include <stdlib.h>
#include <math.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) ) ;
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) ) ;
if ( ! s-> base )
{
exit ( 0 ) ;
}
s-> top = s-> base + s-> stackSize;
s-> stackSize = s-> stackSize + STACKINCREMENT;
}
* ( s-> top) = e;
s-> top++ ;
}
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 s1;
sqStack s2;
int len, i, j, sum = 0 ;
InitStack ( & s1) ;
printf ( "请输入二进制数,输入‘#’号表示结束!\n\n" ) ;
scanf ( "%c" , & c) ;
while ( c != '#' )
{
if ( c== '0' || c== '1' )
Push ( & s1, c) ;
scanf ( "%c" , & c) ;
}
getchar ( ) ;
len = StackLen ( s1) ;
InitStack ( & s2) ;
for ( i= 0 ; i < len; i+ = 3 )
{
for ( j= 0 ; j < 3 ; j++ )
{
Pop ( & s1, & c ) ;
sum = sum + ( c- 48 ) * pow ( 2 , j) ;
if ( s1. base == s1. top )
{
break ;
}
}
Push ( & s2, sum+ 48 ) ;
sum = 0 ;
}
printf ( "\n转化为八进制数是: " ) ;
while ( s2. base != s2. top )
{
Pop ( & s2, & c ) ;
printf ( "%c" , c) ;
}
printf ( "(O)\n" ) ;
return 0 ;
}