#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define OVERFLOW -1
typedef int SElemType;
typedef int Status;
//定义结构体
typedef struct
{
SElemType* base;
SElemType* top;
int StackSize;
}SqStack;
//初始化
Status InitStack(SqStack& S)
{
S.base = new SElemType[MAXSIZE];
S.top = S.base;
S.StackSize = MAXSIZE;
return OK;
}
//入栈
Status PushStack(SqStack& S, SElemType e)
{
if (S.top - S.base == S.StackSize)
return ERROR;
*S.top++ = e;
return OK;
}
//计算栈的长度
Status StackLength(SqStack& S)
{
return S.top - S.base;
}
//取栈顶元素
Status GetTop(SqStack& S)
{
SElemType e;
e = *(S.top - 1);
return e;
}
//出栈
Status PopStack(SqStack& S, SElemType& e)
{
if (S.top == S.base)
return OK;
e = *--S.top;
return OK;
}
//进制转换函数
void conversion(int x, int y, SqStack& S)
{
char digits[] = "0123456789ABCDEF";
while (x > 0)
{
PushStack(S, digits[x % y]);
x = x / y;
}
}
//建立并反转字符
void buildResult(SqStack& S, char* result)
{
int index = 0;
while (StackLength(S) != 0)
{
SElemType e;
PopStack(S,e);
result[index++] = (char)e;
}
result[index] = '\0'; // 添加字符串结束符
//反转字符串
int left = 0;
int right = index - 1;
char temp = 0;
while (left < right)
{
temp = result[right];
result[right] = result[left];
result[left] = temp;
left++;
right--;
}
}
//主函数
int main()
{
SqStack S;
InitStack(S);
int value = 0;
int sys = 0;
printf("请输入一个十进制的数字:\n");
scanf("%d", &value);
printf("请输入一个进制数(2,8,16):\n");
scanf("%d", &sys);
if (sys != 2 && sys != 8 && sys != 16)
{
printf("输入进制错误\n");
return 1;
}
conversion(value,sys, S);
char result[MAXSIZE] = { 0 };
buildResult(S, result);
printf("转换结果: %s\n", result);
return 0;
}
07-28
465

10-08
989
