用短除法,然后把余数倒过来就能得到答案了。
下面是十进制233转二进制和八进制的演示:
余数需要逆序输出,所以可以在短除法时将余数压入栈,整个短除法结束后再全部出栈输出。
程序只写了十进制转二至九进制
#include <iostream>
using namespace std;
template <typename T>
struct Node {
T data;
Node *next;
};
template <typename T>
class Stack {
public:
Stack() {}
~Stack() { while(!empty()) pop(); }
void push(T x) { _top = new Node<T>{x, _top}; }
void pop() { Node<T> *tmp = _top; _top = _top->next; delete tmp; }
T top() { return _top->data; }
bool empty() { return _top == NULL; }
private:
Node<T> *_top = NULL;
};
int main() {
int num, x;
cin >> num >> x;
Stack<int> s;
for (; num; num /= x) s.push(num % x);
for (; !s.empty(); s.pop()) cout << s.top();
return 0;
}