c++写一段将五、八、十二、十六进制数转化成十进制数的代码,数字由用户输出,要有必要的容错率。并为代码注释,说明算法。
时间: 2024-03-06 09:51:51 浏览: 70
以下是一段将五、八、十二、十六进制数转化成十进制数的C++代码,并注释说明算法:
```c++
#include <iostream>
#include <string>
using namespace std;
// 将五进制数转化为十进制数
int quinaryToDecimal(string n) {
int decimal = 0, base = 1;
for (int i = n.size() - 1; i >= 0; i--) {
if (n[i] < '0' || n[i] > '4') { // 判断是否为合法的五进制数
return -1;
}
decimal += (n[i] - '0') * base;
base *= 5;
}
return decimal;
}
// 将八进制数转化为十进制数
int octalToDecimal(string n) {
int decimal = 0, base = 1;
for (int i = n.size() - 1; i >= 0; i--) {
if (n[i] < '0' || n[i] > '7') { // 判断是否为合法的八进制数
return -1;
}
decimal += (n[i] - '0') * base;
base *= 8;
}
return decimal;
}
// 将十二进制数转化为十进制数
int duodecimalToDecimal(string n) {
int decimal = 0, base = 1;
for (int i = n.size() - 1; i >= 0; i--) {
if (n[i] >= '0' && n[i] <= '9') {
decimal += (n[i] - '0') * base;
} else if (n[i] >= 'A' && n[i] <= 'B') {
decimal += (n[i] - 'A' + 10) * base;
} else if (n[i] >= 'a' && n[i] <= 'b') {
decimal += (n[i] - 'a' + 10) * base;
} else {
return -1; // 判断是否为合法的十二进制数
}
base *= 12;
}
return decimal;
}
// 将十六进制数转化为十进制数
int hexadecimalToDecimal(string n) {
int decimal = 0, base = 1;
for (int i = n.size() - 1; i >= 0; i--) {
if (n[i] >= '0' && n[i] <= '9') {
decimal += (n[i] - '0') * base;
} else if (n[i] >= 'A' && n[i] <= 'F') {
decimal += (n[i] - 'A' + 10) * base;
} else if (n[i] >= 'a' && n[i] <= 'f') {
decimal += (n[i] - 'a' + 10) * base;
} else {
return -1; // 判断是否为合法的十六进制数
}
base *= 16;
}
return decimal;
}
int main() {
string n;
int decimal;
cout << "请输入一个五进制数:";
cin >> n;
decimal = quinaryToDecimal(n);
if (decimal == -1) {
cout << "输入的不是合法的五进制数!" << endl;
} else {
cout << "转换后的十进制数为:" << decimal << endl;
}
cout << "请输入一个八进制数:";
cin >> n;
decimal = octalToDecimal(n);
if (decimal == -1) {
cout << "输入的不是合法的八进制数!" << endl;
} else {
cout << "转换后的十进制数为:" << decimal << endl;
}
cout << "请输入一个十二进制数:";
cin >> n;
decimal = duodecimalToDecimal(n);
if (decimal == -1) {
cout << "输入的不是合法的十二进制数!" << endl;
} else {
cout << "转换后的十进制数为:" << decimal << endl;
}
cout << "请输入一个十六进制数:";
cin >> n;
decimal = hexadecimalToDecimal(n);
if (decimal == -1) {
cout << "输入的不是合法的十六进制数!" << endl;
} else {
cout << "转换后的十进制数为:" << decimal << endl;
}
return 0;
}
```
这段代码定义了四个函数,分别用于将五进制数、八进制数、十二进制数、十六进制数转化为十进制数。每个函数都采用了类似的算法,即从低位到高位依次将每一位乘以对应的基数,然后将结果累加起来。在每个函数中,都要判断输入的字符串是否为合法的对应进制数,如果不是则返回-1。最后在主函数中,分别调用这四个函数,输出转换后的十进制数或错误信息。
阅读全文
相关推荐















