顺序栈实现进制转换

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  

#define MAXSIZE 100  

typedef struct {
    char data[MAXSIZE];
    int top;
} Stack;

// 初始化栈  
void initStack(Stack* s) {
    s->top = -1;
}

// 判断栈是否为空  
int isEmpty(Stack* s) {
    return s->top == -1;
}

// 压栈  
int push(Stack* s, char value) {
    if (s->top == MAXSIZE - 1) {
        return 0; // 栈满  
    }
    s->data[++(s->top)] = value;
    return 1;
}

// 出栈  
char pop(Stack* s) {
    if (isEmpty(s)) {
        return '\0'; // 栈空  
    }
    return s->data[(s->top)--];
}

// 获取栈顶元素  
char peek(Stack* s) {
    if (isEmpty(s)) {
        return '\0'; // 栈空  
    }
    return s->data[s->top];
}

// 十进制数转换为其他进制数  
void decimalToBase(int n, int base, Stack* s) {
    char digits[] = "0123456789ABCDEF";
    while (n > 0) {
        push(s, digits[n % base]);
        n /= base;
    }
}

// 从栈中弹出元素并构建结果字符串  
void buildResult(Stack* s, char* result) {
    int index = 0;
    while (!isEmpty(s)) {
        result[index++] = pop(s);
    }
    result[index] = '\0'; // 添加字符串结束符  
    // 反转结果字符串  
    int left = 0, right = index - 1;
    while (left < right) {
        char temp = result[left];
        result[left] = result[right];
        result[right] = temp;
        left++;
        right--;
    }
}

int main() {
    Stack s;
    initStack(&s);

    int decimalNumber;
    printf("请输入一个十进制数: ");
    scanf("%d", &decimalNumber);

    int base;
    printf("请输入目标进制 (2, 8, 16): ");
    scanf("%d", &base);

    if (base < 2 || base > 16) {
        printf("无效的进制!\n");
        return 1;
    }

    decimalToBase(decimalNumber, base, &s);

    char result[MAXSIZE];
    buildResult(&s, result);

    printf("转换结果: %s\n", result);

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值