您的位置:首页 > 编程语言 > C语言/C++

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

2017-10-25 08:09 288 查看
这是将十进制整数转化为十六进制整数 并且是用栈来实现的转化过程// 例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<<"十进制整数"<&l
4000
t;i<<"的十六进制整数表示为:"<<str<<endl;

}

return 0;

}

我们通常都是直接用数组来实现然后在将数组中的元素倒置即可,而由于栈就用后进先出的特点,因此本文用栈来实现转化。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: