用递归和栈进行简单进制转换。
#include<stdio.h>
#include<stdlib.h>
#define N 10000
struct stack{
int top; //栈顶
int data [N];
};
struct stack selfstack = { -1,{0} }; //栈的初始化
int isempty() {
if (selfstack.top == -1)
return 1;
else
return 0;
}
void setempty() { //栈设置为空
selfstack.top = -1;
}
int push(int num) { //压入数据,成功1,失败返回0
if (selfstack.top==N-1){
return 0; //失败
}else {
selfstack.top += 1;
selfstack.data[selfstack.top] = num;
return 1;
}
}
int pop(){
if (selfstack.top == -1){
return -1;//栈为空
}else{
selfstack.top -= 1;
return selfstack.data[selfstack.top + 1]; //返回弹出的数据
}
}
int tentotwo(int num){
if (num != 0){
int m = num % 2;
//printf("%d", m);//放在递归函数之前顺序打印
tentotwo(num / 2);
printf("%d", m);//放在递归函数之后,逆序打印
}
}
int B(int i) {//转换成8进制
if (i != 0){
int j = i % 8;
B(i / 8);
printf("%d", j);
}
}
void main (){
tentotwo(10); //用递归把10转换二进制1010
printf("\n");
int num = 10; //用栈把10转换二进制1010
while (num){
push(num % 2);//压入数据
num /= 2; //循环
}
while (!isempty())
printf("%d", pop());
printf("\n");
B(10);//把10转换成8进制12
//简单的栈操作,逆序打印出数组元素
int a[10] = { 1,2,3,4,5,6,7,8,9,10 };
for (int i = 0; i != 10; ++i)
push(a[i]);
while (!isempty())
printf("\n%d", pop());
return 0;
}
output:
1010
1010
12
10
9
8
7
6
5
4
3
2
1