//计算机 小淇在敲代码 进制转换
#include<iostream>
#include<stdio.h>
#include<malloc.h>
using namespace std;
//顺序栈
typedef struct
{
int *base; //栈底
int *top; //栈顶
int stacksize; //栈的容量
}SqStack;
//初始化栈,创建一个空栈
void initStack(SqStack &S)
{
int max=100;
S.base=(int *)malloc(max*sizeof(int));
S.top=S.base;
S.stacksize=max;
}
//判断栈是否为空
int emptyStack(SqStack S)
{
if(S.top!=S.base)
{
return 0;
}
else
{
return 1;
}
}
//入栈
void push(SqStack &S,int e)
{
if(S.top-S.base>=S.stacksize)
{
int remax=10;
S.base=(int *)realloc(S.base,(S.stacksize+remax)*sizeof(int)); //如果栈满了重新开辟空间
S.top=S.base+S.stacksize;
S.stacksize+=remax;
}
*(S.top)=e;
S.top++;
}
//出栈
void pop(SqStack &S,int &e)
{
if(emptyStack)
{
S.top--;
e=*(S.top);
}
}
//十进制转2、8、16进制
void numberConversion(int oNumber,int cvNumber)
{
SqStack S; //创建栈
int x;
initStack(S); //初始化栈
while(oNumber)
{
x=oNumber%cvNumber;
push(S,x);//余数入栈
oNumber=oNumber/cvNumber;
}
//余数出栈
while(S.top!=S.base)
{
pop(S,x);
switch(x){
case 0: case 1: case 2: case 3:
case 4: case 5: case 6: case 7:
case 8: case 9:cout<<x; break;
case 10:cout<<"A"; break;
case 11:cout<<"B"; break;
case 12:cout<<"C"; break;
case 13:cout<<"D"; break;
case 14:cout<<"E"; break;
case 15:cout<<"F"; break;
}
}
}
//主函数
void main()
{
int oNumber,cvNumber;
int oNumberL,cvNumberL;
{
{
printf("计算机 小淇在敲代码\n");
cout<<"请输入要转换的十进制数: "<<endl;
cin>>oNumber;
cout<<"请输入要转换至的进制,仅限输入2、8以及16: "<<endl;
cin>>cvNumber;
numberConversion(oNumber,cvNumber);
}
}
}