利用栈进行进制转换

用递归和栈进行简单进制转换。

#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


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luuyiran

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值