Bootstrap

利用顺序栈实现非负十进制数转换为其他进制数(数制转换)

Conversion函数思路:

  1. 传入参数:要转换的数n(非负),要转换成的基数base
  2. 方法:根据除基取余的转换方式,将余数压入栈中,然后余数出栈,同时根据ascii编码转换为字符输出

代码:

#include<iostream>
using namespace std;
const int maxsize=100;
//顺序栈的类型定义
typedef int datatype;
typedef struct{
	datatype data[maxsize];
	int Top;
}SeqStack;

//函数原型的声明
void InitStack(SeqStack*& S);		//栈的初始化函数
int Empty(SeqStack* S);				//判断空栈函数
int Push(SeqStack* S,datatype e);	//入栈函数
int Pop(SeqStack* S,datatype& e);	//出栈函数
void Conversion(int,int);
//主函数
int main(){
	int p,q;
	cout<<"Please enter a decimal number:"<<endl;
	cin>>p;
	cout<<"Please enter cardinality:"<<endl;
	cin>>q;
	cout<<"Result of conversion:"<<endl;
	Conversion(p,q);
	return 0;
}
//函数的定义
void InitStack(SeqStack*& S)
{
	S=(SeqStack*)malloc(sizeof(SeqStack));
	S->Top=0;
}
int Push(SeqStack* S,datatype e){
	if(S->Top>=maxsize-1){
		cout<<"栈上溢!"<<endl;
		return 0;
	}
	else{
		S->data[++S->Top]=e;
		return 1;
	}
}
int Pop(SeqStack* S,datatype& e){
	if(Empty(S)){
		cout<<"栈下溢!"<<endl;
		return 0;
	}
	else{
		e=S->data[S->Top--];
		return 1;
	}
}
int Empty(SeqStack* S)
{
	if(S->Top<=0)return 1;
	else
		return 0;
}
void Conversion(int n,int base){
	datatype e;
	SeqStack* S;
	InitStack(S);
	while(n!=0){
		Push(S,n%base);
		n=n/base;
	}
	while(!Empty(S)){
		Pop(S,e);
		if(e>9)printf("%c",e+55);	//超过9进制,余数会大于9时,字符映射到大写字母
		else printf("%c",e+48);		//未超过9进制,余数不大于9时,映射到1-9
	}
	cout<<endl;
}

示例:10转换为16进制的A
在这里插入图片描述

200转换为16进制的C8
在这里插入图片描述

;