下面以无符号十进制转换为八进制为例简述数制转换问题。将十进制数num转换为八进制可以反复执行以下步骤得到:
1,将num除以8,取其余数
2,判断num除以8的商:
若商为零,则转换到此结束;
若商不为零,则将商送num,转到第1步。
算法描述如下:
/* 将无符号十进制数转换为八进制数 */ /* 堆栈采用顺序存储结构 */ #define M 100 void conversion( int num ){ int stack[ M ], int top = -1; do{ stack[ ++top ] = num % 8; /* 将本次取得的余数进栈 */ num = num / 8; }while( num != 0 ); while( top != -1 ){ printf( "%d", stack[ top-- ] ); /* 依次退栈 */ } } /* 堆栈采用链式存储结构 */ typedef struct node{ int data; struct node *link; }STNode, *STLink; void conversion( int num ){ STLink p, top = NULL; do{ p = ( STLink )malloc( sizeof( STNode ) ); if( p != NULL ){ p->data = num % 8; /* 将本次取得的余数进栈 */ p->link = top; top = p; num = num / 8; /* 求得num除以8的商 */ } }while( num != 0 ); while( top != NULL ){ p = top; printf( "%d", top->data ); top = top->link; /* 依次退栈 */ free( p ); /* 释放链接点空间 */ } }