1、写一个数制转换的完整程序,对于键盘输入的任意一个非负十进制数,转换成等值的二进制数,八进制数,或十六进制数,保存为conversion 文件。(利用栈实现)
时间: 2024-05-15 22:13:19 浏览: 166
以下是使用栈实现数制转换的完整程序:
```c++
#include <iostream>
#include <stack>
#include <fstream>
using namespace std;
// 十进制转二进制
void decimalToBinary(int decimal, stack<int>& binaryStack) {
while (decimal != 0) {
binaryStack.push(decimal % 2);
decimal /= 2;
}
}
// 十进制转八进制
void decimalToOctal(int decimal, stack<int>& octalStack) {
while (decimal != 0) {
octalStack.push(decimal % 8);
decimal /= 8;
}
}
// 十进制转十六进制
void decimalToHexadecimal(int decimal, stack<int>& hexadecimalStack) {
while (decimal != 0) {
hexadecimalStack.push(decimal % 16);
decimal /= 16;
}
}
int main() {
int decimal;
cout << "请输入一个非负十进制数:";
cin >> decimal;
stack<int> binaryStack, octalStack, hexadecimalStack;
decimalToBinary(decimal, binaryStack);
decimalToOctal(decimal, octalStack);
decimalToHexadecimal(decimal, hexadecimalStack);
ofstream outFile("conversion.txt");
if (!outFile) {
cerr << "无法打开文件!" << endl;
exit(1);
}
// 输出二进制数
outFile << "二进制数:";
while (!binaryStack.empty()) {
outFile << binaryStack.top();
binaryStack.pop();
}
outFile << endl;
// 输出八进制数
outFile << "八进制数:";
while (!octalStack.empty()) {
outFile << octalStack.top();
octalStack.pop();
}
outFile << endl;
// 输出十六进制数
outFile << "十六进制数:";
while (!hexadecimalStack.empty()) {
int remainder = hexadecimalStack.top();
if (remainder < 10)
outFile << remainder;
else
outFile << (char)('A' + remainder - 10);
hexadecimalStack.pop();
}
outFile << endl;
outFile.close();
cout << "转换成功,结果已保存到 conversion.txt 文件中。" << endl;
return 0;
}
```
程序中定义了三个函数,用于将十进制数转换为二进制、八进制和十六进制。这三个函数都利用了栈来实现转换过程,具体实现方式是不断将余数入栈,直到商为0。最后,再从栈中取出各位数字,组成转换后的数。
程序运行后,首先要求用户输入一个非负十进制数。然后,程序调用上述三个函数,将结果存放到对应的栈中。最后,程序将转换结果输出到文件 conversion.txt 中。输出时,需要注意将十六进制数中大于等于10的余数转换为对应的字母。
阅读全文