给定n个十六进制正整数,输出它们对应的八进制数。输入的第一行为一个正整数n (1<=n<=10)。 接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
时间: 2023-05-31 18:03:56 浏览: 108
编写程序,以字符形式输入一个十六进制数,将其变换为一个十进制整数后输出。(要求:十六进制允许的字符是从0~9和a~f或A~F)
5星 · 资源好评率100%
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
string hexToBin(string hex) { // 十六进制转二进制
string bin = "";
for (int i = 0; i < hex.length(); i++) {
switch (hex[i]) {
case '0': bin += "0000"; break;
case '1': bin += "0001"; break;
case '2': bin += "0010"; break;
case '3': bin += "0011"; break;
case '4': bin += "0100"; break;
case '5': bin += "0101"; break;
case '6': bin += "0110"; break;
case '7': bin += "0111"; break;
case '8': bin += "1000"; break;
case '9': bin += "1001"; break;
case 'A': bin += "1010"; break;
case 'B': bin += "1011"; break;
case 'C': bin += "1100"; break;
case 'D': bin += "1101"; break;
case 'E': bin += "1110"; break;
case 'F': bin += "1111"; break;
}
}
return bin;
}
string binToOct(string bin) { // 二进制转八进制
int len = bin.length();
if (len % 3 == 1) bin = "00" + bin;
else if (len % 3 == 2) bin = "0" + bin;
string oct = "";
for (int i = 0; i < len; i += 3) {
int num = (bin[i] - '0') * 4 + (bin[i+1] - '0') * 2 + (bin[i+2] - '0');
oct += to_string(num);
}
return oct;
}
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
string hex;
cin >> hex;
string bin = hexToBin(hex);
string oct = binToOct(bin);
while (oct[0] == '0' && oct.length() > 1) oct.erase(0, 1); // 去掉前导零
cout << oct << endl;
}
return 0;
}
阅读全文