下面以无符号十进制转换为八进制为例简述数制转换问题。将十进制数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 ); /* 释放链接点空间 */
}
}