编写C++程序设计语言实现二、八、十、十六进制数之间相互转换,具体功能: 1. 各进制数字符串转换为十进制正数值; 2. 分离十进制数值的整数和小数部分; 3. 对分离出的整数、小数部分分别做转换,将其转换为目标进制; 4. 将转换好的整数、小数部分以及符号位拼接为字符串输出。
时间: 2024-05-10 13:17:57 浏览: 122
以下是一个实现该功能的 C++ 程序:
```cpp
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
// 将各进制数字符串转换为十进制正数值
int toDecimal(string numStr, int base) {
int decimal = 0;
int power = 0;
for (int i = numStr.length() - 1; i >= 0; i--) {
int digit = 0;
if (numStr[i] >= '0' && numStr[i] <= '9') {
digit = numStr[i] - '0';
} else if (numStr[i] >= 'a' && numStr[i] <= 'f') {
digit = numStr[i] - 'a' + 10;
} else if (numStr[i] >= 'A' && numStr[i] <= 'F') {
digit = numStr[i] - 'A' + 10;
}
decimal += digit * pow(base, power);
power++;
}
return decimal;
}
// 分离十进制数值的整数和小数部分
void separateDecimal(double decimal, int& integerPart, double& decimalPart) {
integerPart = (int)decimal;
decimalPart = decimal - integerPart;
}
// 将整数部分转换为目标进制的字符串
string toBase(int integerPart, int base) {
string baseStr = "";
while (integerPart > 0) {
int digit = integerPart % base;
if (digit < 10) {
baseStr = (char)(digit + '0') + baseStr;
} else {
baseStr = (char)(digit - 10 + 'a') + baseStr;
}
integerPart /= base;
}
if (baseStr == "") {
baseStr = "0";
}
return baseStr;
}
// 将小数部分转换为目标进制的字符串
string toBase(double decimalPart, int base) {
string baseStr = "";
while (decimalPart > 0) {
decimalPart *= base;
int digit = (int)decimalPart;
if (digit < 10) {
baseStr += (char)(digit + '0');
} else {
baseStr += (char)(digit - 10 + 'a');
}
decimalPart -= digit;
}
if (baseStr == "") {
baseStr = "0";
}
return baseStr;
}
// 将各进制数字符串转换为目标进制数字符串
string convertBase(string numStr, int fromBase, int toBase) {
int decimal = toDecimal(numStr, fromBase);
int integerPart;
double decimalPart;
separateDecimal(decimal, integerPart, decimalPart);
string integerStr = toBase(integerPart, toBase);
string decimalStr = toBase(decimalPart, toBase);
return integerStr + "." + decimalStr;
}
int main() {
string numStr;
int fromBase, toBase;
cout << "请输入要转换的数:";
cin >> numStr;
cout << "请输入该数的进制:";
cin >> fromBase;
cout << "请输入目标进制:";
cin >> toBase;
string result = convertBase(numStr, fromBase, toBase);
cout << "转换结果为:" << result << endl;
return 0;
}
```
该程序实现了将任意进制数转换为任意进制数的功能。用户输入要转换的数、该数的进制以及目标进制,程序将输出转换结果。例如,以下是将二进制数 1011.01 转换为十六进制数的输出:
```
请输入要转换的数:1011.01
请输入该数的进制:2
请输入目标进制:16
转换结果为:b.d
```
阅读全文