进制转换(利用栈实现)

目录 

知识总结

例题描述

实现代码(手写栈实现)

实现代码(调用STL库中的栈实现)


知识总结

十进制整数N向其它进制数d(二、八、十六)的转换是计算机实现计算的基本问题。

转换法则:除以d倒取余

该转换法则对应于一个简单算法原理:

n = (n div d) * d + n mod d

其中:div为整除运算,mod为求余运算

例题描述

该例题是以十进制转换为八进制来做的:

 通过上面图示的过程,我们可以将问题由十进制转换为8进制推广到十进制转换为n进制。

实现代码(手写栈实现)

#include<bits/stdc++.h>
using namespace std;
#define MAXSIZE 100
typedef struct SqStack {
	int *base;
	int *top;
	int stacksize;
}SqStack;

bool InitStack(SqStack &S) {
	S.base = new int[MAXSIZE];
	if(!S.base)  //存储分配失败 
		exit(-1);
	S.top = S.base;
	S.stacksize = MAXSIZE;
	return true;
}

bool Pop(SqStack &S,int &e) {
	if(S.base == S.top)
		return false;
	e = *--S.top;
	return true;
}

bool Push(SqStack &S,int e) {
	if(S.top - S.base == S.stacksize)
		return false;
	*S.top++ = e;
	return true;
}
void convert(int x, int n) {
	int e;
	SqStack st;
	InitStack(st);
	while(x){
		e = x % n;
		x /= n;
		Push(st,e);
	}
	while(st.base != st.top) {
		Pop(st,e);
		cout << e;
	}
	cout << endl;
}
int main() {
	int x, n;
	cout << "请输入想要转换的十进制数" << endl; 
	cin >> x;
	cout << "请输入想要转换的进制" << endl; 
	cin >> n;
	cout << x << "的" << n << "进制为:"; 
	convert(x, n);
	return 0;
} 

实现代码(调用STL库中的栈实现)

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n, r;
    cin >> n >> r;
    stack< int > S;
    if(n == 0)
		cout << "0" << endl;
	else {
		int t;
        while(n) {
            t = n % r;
            S.push(t);
            n /=r ;
        }
        while(!S.empty()) {
            cout << S.top();
            S.pop();
        }
        cout << endl;
   }
   return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值