1、将任意十进制数转换为三种进制数(二进制、八进制、十六进制)。 2、输入任意一串由括号(、)、[、]、{、}组成的括号序列,判断括号是否匹 配。 提示:采用顺序栈实现。用c++
时间: 2024-10-17 13:09:51 浏览: 16
1. 将任意十进制数转换为二进制、八进制和十六进制的过程通常通过除权取余法(也称为短除法)完成。以下是基本步骤:
- **二进制**:从十进制数开始除以2,每次得到的余数就是下一位的值,直到商为0为止。最后的结果是从下往上读取每一位。
```cpp
void decimalToBinary(int decimal) {
std::string binary;
while (decimal > 0) {
binary = std::to_string(decimal % 2) + binary;
decimal /= 2;
}
std::cout << "二进制:" << binary << std::endl;
}
```
- **八进制**:同样地,除以8并记录余数,直到商为0,然后从低到高排列。
```cpp
void decimalToOctal(int decimal) {
std::string octal;
while (decimal > 0) {
octal = std::to_string(decimal % 8) + octal;
decimal /= 8;
}
std::cout << "八进制:" << octal << std::endl;
}
```
- **十六进制**:将十进制数先转成二进制,再每四位一组分为十六进制,可以用`std::stringstream`简化过程。
```cpp
void decimalToHexadecimal(int decimal) {
std::stringstream ss;
ss << std::hex << decimal;
std::cout << "十六进制:" << ss.str() << std::endl;
}
```
2. 判断括号匹配问题可以使用栈数据结构。遍历给定的括号序列,对于每个遇到的左括号,将其压入栈;当遇到右括号时,检查栈顶的左括号是否与其匹配,如果不匹配则返回false。如果遍历结束后栈为空,则说明所有括号都已匹配,返回true。
```cpp
bool isParenthesesMatched(const std::string& parentheses) {
std::stack<char> stack;
for (char c : parentheses) {
if (c == '(' || c == '[' || c == '{') {
stack.push(c);
} else if (!stack.empty() && (c == ')' && stack.top() == '(' ||
c == ']' && stack.top() == '[' ||
c == '}' && stack.top() == '{')) {
stack.pop();
} else {
return false;
}
}
return stack.empty();
}
```
阅读全文