数据结构 C++ 自定义栈实现10进制数转换为n进制数

说明:代码中我为了测试的舒服一点,使用了long long int数据类型,可以为int类型但太长的话会报错,尤其是10进制转2进制时。

(好像参考了别人的某篇文章,记不清了,侵权的话联系我删除哈)

主要思想就是把10进制数依次除n放入栈,再乘10出栈,达到一种打印出n进制数的效果。

#include <iostream>
using namespace std;

#define maxlength 100
typedef long long int Elementtype;

struct STACK {
	int top;
	Elementtype elements[maxlength];
};

void MakeNULL(STACK &S) {
	S.top = maxlength;
}

bool Empty(STACK S) {
	if (S.top >= maxlength)
		return true;
	else
		return false;
}

Elementtype Top(STACK S) { //返回栈顶元素
	if (Empty(S))
		return false;
	else
		return (S.elements[S.top]);
}

void Pop(STACK &S) {
	if (Empty(S))
		cout << "Stack is empty." << endl;
	else
		S.top = S.top + 1;
}

void Push(Elementtype x, STACK &S) {
	if (S.top == 0)
		cout << "Stack is full." << endl;
	else {
		S.top = S.top - 1;
		S.elements[S.top] = x;
	}
}

//进制转换进栈
void turn(int n, STACK &S, int m) {
	while (n) {
		Push(n % m, S);
		n /= m;
	}
}

//打印转换后的m进制数
void print(STACK &S) {
	while ( !Empty(S)) {
		if (S.elements[S.top] >= 10) {
			cout << "`";
			cout << S.elements[S.top];
			cout << "`";
			Pop(S);
		} else {
			cout << S.elements[S.top];
			Pop(S);
		}
	}
	cout << endl;

}

int main() {
	long long int n, m;
	cout << "请输入你想要转换的数字:";
	cin >> n;
	cout << "请输入你想要转换为m进制的数:";
	cin >> m;
	STACK S;
	MakeNULL(S);

	long long int result;
	turn(n, S, m);
	//int size = maxlength - S.top;
	cout << n << "转化为" << m << "进制后为:" << endl;
	print(S);

	return 0;

}

主要参考:        《数据结构与算法》(第五版)张岩

                          《数据结构考研复习指导》(王道)

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值