c++ j將十進位制整數轉化為十六進位制整數 用棧來實現
阿新 • • 發佈:2019-01-26
這是將十進位制整數轉化為十六進位制整數 並且是用棧來實現的轉化過程// 例1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<iostream>
{
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;
}
我們通常都是直接用陣列來實現然後在將陣列中的元素倒置即可,而由於棧就用後進先出的特點,因此本文用棧來實現轉化。
//
#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;
}
我們通常都是直接用陣列來實現然後在將陣列中的元素倒置即可,而由於棧就用後進先出的特點,因此本文用棧來實現轉化。