c++ j将十进制整数转化为十六进制整数 用栈来实现

来源:互联网 发布:韦德五次总决赛数据 编辑:程序博客网 时间:2024/06/16 02:43
这是将十进制整数转化为十六进制整数 并且是用栈来实现的转化过程// 例1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<iostream>

using namespace std;


struct SqStack
{
int *base;//指向栈底的指针
int *top;//指向栈顶元素下一个位置的指针
int stacksize;//栈的大小
};

int InitStack(SqStack &S)
{//顺序栈的初始化,构造一个空栈
S.top=S.base=new int[1];
if(S.base==0) return 0;//若申请空间失败,返回0
S.stacksize=1;
return 1;//栈初始化成功,返回1
}

int push(SqStack &S,int e)
{//向栈中压入元素e
if(S.top-S.base==S.stacksize)//栈的空间已满,增加空间
{
int *newbase;
newbase=new int[S.stacksize*2];
if(newbase==0) return 0;
for(int i=0;i<=S.stacksize-1;i++)
{//将原有栈中的元素拷贝到新栈中
newbase[i]=S.base[i];
}
delete S.base;//删除原有栈的空间
S.base=newbase;//原有栈的栈底指针指向新栈空间
S.top=&S.base[S.stacksize];//新栈栈顶元素的下一个位置
S.stacksize*=2;
}
*S.top=e;
S.top++;
return 1;
}

int GetTop(SqStack S)
{//返回栈顶元素
return *(S.top-1);
}

void pop(SqStack &S)
{//从栈S中删除元素
S.top--;
}

bool empty(SqStack S)
{//判断栈是否为空,若是返回true,否则返回false
if(S.base==S.top)
return true;
else return false;
}

void print(SqStack S)
{//打印栈中元素
int *p=S.base;
while(p<S.top)
{
cout<<*p<<" ";
p++;
}
cout<<endl;
}

void DestroyStack(SqStack &S)
{//释放栈所占的空间
delete S.base;
}

void NumTransfrom(int N,char str[])
{//将十进制整数N转化为十六进制数,存储到字符数组str中
int m;//存储商
int n;//存储余数

SqStack S;//定义一个栈变量
InitStack(S);

if(N==0)
{//N是0,十六进制就是0
str[0]='0';
str[1]='\0';
return;
}

while(N!=0)
{
m=N/16;//求商
n=N%16;//求余数
push(S,n);//余数入栈
N=m;
}

int index=0;
while(empty(S)==false)
{
int temp;
temp=GetTop(S);//整数出栈
pop(S);
if(temp>=0&&temp<=9)
str[index]='0'+temp;//整数插入到字符串尾部
else
str[index]='A'+temp-10;//将大于9的数字转化为相应的字母
index++;
}
str[index]='\0';
DestroyStack(S);//释放栈所占的空间
}

int main(int argc, char* argv[])
{
char str[100];
for(int i=0;i<=36;i++)
{
NumTransfrom(i,str);
cout<<"十进制整数"<<i<<"的十六进制整数表示为:"<<str<<endl;
}
return 0;
}
我们通常都是直接用数组来实现然后在将数组中的元素倒置即可,而由于栈就用后进先出的特点,因此本文用栈来实现转化。


原创粉丝点击