关于进制转换的问题都老掉牙了,方法有很多,但思路大都一样:将每次除以8后的余数余数倒序输出(这里以10转8为例)。因而进制转换就变味倒序输出的问题,倒序的方法有很多,比如直接用数组存储余数,然后数组要倒序输出就很简单了,本文就不赘述了。
本文重点讲后两种方法:
1.递归输出;
2.使用栈结构存和取,结果很自然为逆序。
方法一、递归
#include<stdio.h>
#include<stdlib.h>
void f(int);
void main()
{
int n;
bool flag;
scanf("%d",&n);
if(n<0){
flag=true;
n=-n;
}
else
flag=false;
f(n);
printf("\n");
}
void f(int n){
if(n/8)
f(n/8);
printf("%d",n%8);
}
typedef struct{
StackElemtype *top;
StackElemType *base;
int stacksize;
}Stack;
void conversion(int n){
Stack *S;
int elem;
InitStack(S); //创建空栈
while(n%8){
push(S,n%8);
n=n/8;
}
while(!StackEmpty(S)){
pop(S,elem);
printf("%d",elem);
}
}
上述两种方法不同,本质是相同的,系统为每一层递归也开辟了栈空间,将余数存储,而方法二的则是我们认为的栈操作,更加简单直观。