请利用数据结构课本上的顺序栈方式定义,并用switch改写,十进制转n进制
时间: 2024-10-20 19:08:27 浏览: 17
利用数据结构课本中的顺序栈,我们可以创建一个通用的十进制转任意n进制(包括二进制、八进制、十六进制等)的函数。这里先定义一个基本的顺序栈模板,接着使用`switch`语句根据不同进制进行转换:
```cpp
template<typename T>
class Stack {
private:
T* array;
size_t top;
size_t capacity;
public:
Stack(size_t size) : array(new T[size]), top(0), capacity(size) {}
void push(T value) {
if (top == capacity) {
resize(capacity * 2);
}
array[top++] = value;
}
T pop() {
if (isEmpty()) {
throw std::runtime_error("Stack is empty");
}
T value = array[top - 1];
top--;
return value;
}
bool isEmpty() const { return top == 0; }
private:
void resize(size_t newCapacity) {
T* newArray = new T[newCapacity];
for (size_t i = 0; i < top; ++i) {
newArray[i] = array[i];
}
delete[] array;
array = newArray;
capacity = newCapacity;
}
};
template<typename T>
std::string decimalToBase(int decimal, T base) {
Stack<T> digits;
while (decimal > 0) {
digits.push(decimal % base);
decimal /= base;
}
std::string result;
while (!digits.isEmpty()) {
result = std::to_string(digits.pop()) + result;
}
return result;
}
int main() {
switch (base) {
case 2: // 二进制
std::cout << decimalToBase<int>(10, 2) << "\n"; break;
case 8: // 八进制
std::cout << decimalToBase<int>(10, 8) << "\n"; break;
case 16: // 十六进制
std::cout << decimalToBase<int>(10, 16) << "\n"; break;
default:
std::cerr << "Invalid base.\n";
}
return 0;
}
阅读全文