c++利用堆栈结构实现打印任意进制
浏览数:2345 

#include<iostream>

using namespace std;

class Stack{//顺序堆栈

public://默认私有

Stack(int psize=10):size(psize),top(0),data(new int[psize]){}

~Stack(void){

if(data)

delete[] data;

data=NULL;

}

bool isEmpty(){

return !top;

}

bool isFull(){

return top>=size;

}

void push(int pdata){

if(isFull())

throw OverFlow();

data[top++]=pdata;

}

int pop(void){

if(isEmpty())

throw UnderFlow();

return data[--top];

}

private:

class OverFlow:public exception{

const char* what()const throw(){

return "堆栈上溢出";

}

};

class UnderFlow:public exception{

const char* what()const throw(){

return "堆栈下溢出";

}

};

int *data;

int size;

int top;

};

void printb(unsigned int num,int base){//利用堆栈数据结构实现

Stack stack(256);

do{

stack.push(num%base);

}while(num=num/base);

while(!stack.isEmpty()){

int digit=stack.pop();

if(digit<10)

cout<<digit;

else//求模结果大于10

cout<<char((digit-10)+'A');

}

cout << endl;

}

int main(){

try{

Stack stack;

int num,base;

for(int i=0;!stack.isFull();i++)

stack.push(i);

while(!stack.isEmpty()){

cout<<stack.pop()<<' ';

}cout << endl;

cout<<"请输入需要转换的整数:";

cin>>num;

cout<<"请输入需要转换的进制:";

cin>>base;

printb(num,base);

}

catch(exception& ex){

cout<<ex.what()<<endl;

return -1;

}

return 0;

}


联系管理员
 
 
 
 
 工作时间
周一至周五 :9:30-17:30
马上建站
会员登录
登录
我的资料
留言
回到顶部