利用栈实现进制转换

来源:互联网 发布:p2p网络摄像机软件 编辑:程序博客网 时间:2024/05/16 14:35

用栈来实现进制间的转换实际上只是利用了栈的“先进后出”的原则,实际上完全可以不用栈来实现进制间的转换,可以将数组逆置来代替栈的作用,而且代码较少。

////////////////////////////////////////////////////      利用栈来实现进制转换/////////////////////////////////////////////////////////////////#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define MAXSIZE 100 typedef struct SeqStack{int data[MAXSIZE] ;int top ; int base ;} SeqStack ;void InitStack( SeqStack * S ){S->top = 0 ;S->base = 0 ;}void Push( SeqStack * S , int elem ){if( S->top - S->base + 1 >= MAXSIZE ){printf("栈已满无法进行插入操作!\n") ;exit(0) ;}S->data[S->top++] = elem ;}void Pop( SeqStack * S , int * elem ){if( S->base == S->top ){printf("栈为空,无法进行出栈操作!") ;exit(0) ;}*elem = S->data[--S->top] ;}// 将十进制转换为二进制void decimalToBinary( int number , char * binary ){SeqStack S ;int elem ;int remainder ;  // 余数int quotient = number ;   // 商// 初始化栈InitStack( &S ) ;while( 1 ){remainder = quotient % 2 ;quotient = quotient / 2 ;Push( &S , remainder ) ;if( quotient == 0 ){break ;}}int i = 0 ;while( S.base != S.top ){Pop( &S , &elem )  ;binary[i++] = char(elem + 48) ;}binary[i] = '\0' ;}// 将十进制转换为N进制(2=<N<=16)void decimalTonRadix( int number , int N , char * nRadix ){SeqStack S ;int quotient = number ;    // 商int remainder ;   // 余数InitStack( &S ) ;   // 初始化栈while( 1 ){remainder = quotient % N ;quotient /= N ;Push( &S , remainder ) ;if( quotient == 0 ){break ;}}int i = 0 ;int elem  ;while( S.base != S.top ){Pop( &S , &elem ) ;if( elem >= 10 ){nRadix[i++] = char(elem - 10 + 65) ;}else{nRadix[i++] = char(elem + 48 ) ;}}nRadix[i] = '\0' ;}int main(){int number ; // 待转换的数int N ;      // 要转换的进制char binary[50] ;char nRadix[50] ;printf("输入要转换的数:") ;scanf("%d", &number ) ;printf("输入要转换的进制N(2<=N<=16):") ;scanf("%d" , &N ) ;//decimalToBinary( number , binary ) ;//printf("%s\n" , binary) ;decimalTonRadix( number , N , nRadix ) ;printf("%s\n" , nRadix ) ;    printf("\n") ;return 0 ;}