C++编写程序 二、八、十、十六进制数之间相互转换。(包含小数)
时间: 2023-07-10 15:23:01 浏览: 154
好的,我可以为您提供一个简单的 C++ 程序,实现二、八、十、十六进制数之间的相互转换(包含小数)。以下是程序代码:
```cpp
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
// 二进制转十进制
int binToDec(string num) {
int len = num.length();
int dec = 0;
for (int i = 0; i < len; i++) {
dec += (num[i] - '0') * pow(2, len - i - 1);
}
return dec;
}
// 八进制转十进制
int octToDec(string num) {
int len = num.length();
int dec = 0;
for (int i = 0; i < len; i++) {
dec += (num[i] - '0') * pow(8, len - i - 1);
}
return dec;
}
// 十六进制转十进制
int hexToDec(string num) {
int len = num.length();
int dec = 0;
for (int i = 0; i < len; i++) {
if (num[i] >= '0' && num[i] <= '9') {
dec += (num[i] - '0') * pow(16, len - i - 1);
} else if (num[i] >= 'A' && num[i] <= 'F') {
dec += (num[i] - 'A' + 10) * pow(16, len - i - 1);
} else if (num[i] >= 'a' && num[i] <= 'f') {
dec += (num[i] - 'a' + 10) * pow(16, len - i - 1);
}
}
return dec;
}
// 十进制转二进制
string decToBin(int num) {
string bin = "";
while (num > 0) {
bin = to_string(num % 2) + bin;
num /= 2;
}
return bin;
}
// 十进制转八进制
string decToOct(int num) {
string oct = "";
while (num > 0) {
oct = to_string(num % 8) + oct;
num /= 8;
}
return oct;
}
// 十进制转十六进制
string decToHex(int num) {
string hex = "";
while (num > 0) {
int tmp = num % 16;
if (tmp < 10) {
hex = to_string(tmp) + hex;
} else {
hex = (char)('A' + tmp - 10) + hex;
}
num /= 16;
}
return hex;
}
// 浮点数转换为整数和小数部分
void splitFloat(double num, int& integer, double& fraction) {
integer = (int)num;
fraction = num - integer;
}
// 小数部分转二进制
string fractionToBin(double fraction) {
string bin = "";
int count = 0;
while (fraction > 0 && count < 6) { // 最多保留6位小数
fraction *= 2;
if (fraction >= 1) {
bin += '1';
fraction -= 1;
} else {
bin += '0';
}
count++;
}
return bin;
}
int main() {
string num;
int base;
cout << "请输入要转换的数(包含小数):" << endl;
cin >> num;
cout << "请输入要转换的数的进制(2, 8, 10, 16):" << endl;
cin >> base;
int integer;
double fraction;
splitFloat(stod(num), integer, fraction);
string result = "";
if (base == 2) {
result = decToBin(integer) + "." + fractionToBin(fraction);
} else if (base == 8) {
result = decToOct(integer) + "." + fractionToBin(fraction);
} else if (base == 10) {
result = num;
} else if (base == 16) {
result = decToHex(integer) + "." + fractionToBin(fraction);
}
cout << "转换结果:" << result << endl;
return 0;
}
```
该程序可以接受用户输入一个数(包含小数)和该数的进制(2、8、10 或 16),并将该数转换成另外三种进制的形式输出。程序还包含了将浮点数分成整数和小数部分、小数部分转二进制等辅助函数。
阅读全文