数制转换

使用栈实现数制转换
#include"stdio.h"
#include"iostream"
using namespace std;
const int MAXSIZE = 100;
typedef struct
{
	char *base;
	char *top;
	int size;
}sqstack;
bool INitStack(sqstack &s)
{
	s.base = new char[MAXSIZE];
	if (!s.base)exit(OVERFLOW);
	s.top = s.base;
	s.size = MAXSIZE;
	return true;
}
bool ClearStack(sqstack &s)
{
	s.top = s.base;
	return true;
}
bool push(sqstack &s, int e)
{
	if (s.top - s.base == s.size)return false;
	*s.top = e;
	s.top++;
	return true;
}
bool pop(sqstack &s, int &e)
{
	if (s.top == s.base)return false;
	s.top--;
	e = *s.top;
	return true;
}
int Gettop(sqstack s)
{
	if (s.top != s.base)
		return *(s.top - 1);
	return 0;
}
void show(sqstack const s)
{
	sqstack p = s;
	p.top--;
	do
	{
		cout << *p.top;
		if (p.top == p.base)break;
		p.top--;
	} while (1);
}
bool BIT(sqstack &s,int &sum)
{
	int i, temp;
	temp = sum;
	while (sum != 0)
	{
		i = sum % 2;
		if (i < 0)
		{
			i = -i;
		}
		switch (i)
		{
		case 1:i = '1'; break;
		case 0:i = '0'; break;
		}
		sum = sum / 2;
		push(s, i);
	}
	if (temp >= 0)
	{
		push(s, '0');
	}
	else
	{
		push(s, '1');
	}
	cout << "二进制数为:" << endl;
	show(s);
	cout << endl;
	ClearStack(s);
	return true;
}
bool HEX(sqstack &s,int &sum)
{
	int temp, i;
	temp = sum;
	while (sum != 0)
	{
		i = sum % 16;
		if (i < 0)
		{
			i = -i;
		}
		switch (i)
		{
		case 1:i = '1'; break;
		case 2:i = '2'; break;
		case 3:i = '3'; break;
		case 4:i = '4'; break;
		case 5:i = '5'; break;
		case 6:i = '6'; break;
		case 7:i = '7'; break;
		case 8:i = '8'; break;
		case 9:i = '9'; break;
		case 10:i = 'A'; break;
		case 11:i = 'B'; break;
		case 12:i = 'C'; break;
		case 13:i = 'D'; break;
		case 14:i = 'E'; break;
		case 15:i = 'F'; break;
		}
		sum = sum / 16;
		push(s, i);
	}
	if (temp >= 0)
	{
		push(s, '0');
	}
	else
	{
		push(s, '1');
	}
	cout << "十六进制数为;" << endl;
	show(s);
	cout << endl;
	ClearStack(s);
	return true;
}
int main()
{
	int sum;
	sqstack s;
	INitStack(s);
	cout << "请输入需要转换的数:" << endl;
	cin >> sum;
	cout << "进行几进制转换(1.二进制,2.十六进制):" << endl;
	int i;
	cin >> i;
	switch (i)
	{
	case 1:BIT(s,sum); break;
	case 2:HEX(s,sum); break;
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值