目录
知识总结
十进制整数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;
}