栈和队列综合应用:进制转换(必做题)使用栈和队列结构,将用户输入的非负十进制数x,将其转换成二进制数输出。如(3.25)10=(11.01)2给出cpp代码
时间: 2024-09-20 22:11:19 浏览: 82
在C++中,我们可以利用栈和队列数据结构来实现十进制转二进制的过程。这里我们先通过栈来处理整数部分,然后用队列处理小数部分。以下是基本的步骤和示例代码:
```cpp
#include <iostream>
#include <stack>
#include <queue>
#include <cmath>
// 将整数部分转换为二进制
void decimalToBinary(int num, std::stack<int>& stack) {
while (num > 0) {
stack.push(num % 2);
num = num / 2;
}
}
// 将小数部分转换为二进制,因为小数点后的每一位都是前一位的一半,可以用队列模拟无限循环
std::queue<char> decimalToBinaryFraction(double fraction) {
char result[16]; // 预留足够的空间存储最多15位小数
int index = 0;
while (fraction > 0 && index < sizeof(result)) {
double nextFraction = fraction * 2;
if (nextFraction >= 1) {
result[index] = '1';
fraction -= 1;
} else {
result[index] = '0';
}
fraction = nextFraction - floor(nextFraction); // 更新fraction值
index++;
}
std::queue<char> q(result, result + index);
return q;
}
// 主函数
void convertDecimalToBinary(double x) {
std::stack<int> integerStack;
std::queue<char> fractionalQueue;
// 整数部分
int integralPart = static_cast<int>(x);
decimalToBinary(integralPart, integerStack);
// 小数部分
double fractionalPart = x - integralPart;
fractionalQueue = decimalToBinaryFraction(fractionalPart);
// 输出结果
for (char digit : integerStack) {
std::cout << digit;
}
if (!fractionalQueue.empty()) {
std::cout << ".";
while (!fractionalQueue.empty()) {
std::cout << fractionalQueue.front();
fractionalQueue.pop();
}
}
}
int main() {
double input = 3.25;
std::cout << "(" << input << ")10 = (" << convertDecimalToBinary(input) << ")2\n";
return 0;
}
```
这个程序首先会将整数部分转换为二进制,并将结果压入栈中。接着处理小数部分,将每个位的数字添加到队列中。最后,根据栈和队列的内容组合出完整的二进制字符串。
阅读全文