资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
【提示】
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
Python
先将十六进制数转换成十进制数,再转换成八进制
n=int(input())
str_hex=[]
for i in range(0,n):
str_hex.append(input())
str_oct=oct(int(str_hex[i],16))
print(str_oct[2:])
C++
先将十六进制数转换成二进制数,再转换成八进制
#include<iostream>
#include<cstring>
using namespace std;
int main() {
int n;
cin >> n;
string str_hex, str_bin, str_oct;
for (int i = 0; i < n; i++) {
str_hex = "", str_bin = "", str_oct = "";
cin >> str_hex;
int len_hex = str_hex.length();
for (int j = 0; j < len_hex; j++) {
switch (str_hex[j])
{
case '0': str_bin += "0000"; break;
case '1': str_bin += "0001"; break;
case '2': str_bin += "0010"; break;
case '3': str_bin += "0011"; break;
case '4': str_bin += "0100"; break;
case '5': str_bin += "0101"; break;
case '6': str_bin += "0110"; break;
case '7': str_bin += "0111"; break;
case '8': str_bin += "1000"; break;
case '9': str_bin += "1001"; break;
case 'A': str_bin += "1010"; break;
case 'B': str_bin += "1011"; break;
case 'C': str_bin += "1100"; break;
case 'D': str_bin += "1101"; break;
case 'E': str_bin += "1110"; break;
case 'F': str_bin += "1111"; break;
default:
break;
}
}
int len_bin = str_bin.length();
if (len_bin % 3 == 1) {
str_bin = "00" + str_bin;
}
if (len_bin % 3 == 2) {
str_bin = "0" + str_bin;
}
if (!(str_bin[0] == '0' && str_bin[1] == '0' && str_bin[2] == '0')) {
str_oct += (str_bin[0] - '0') * 4 + (str_bin[1] - '0') * 2 + str_bin[2];
//整数与字符相加
}
for (int k = 3; k < len_bin; k+=3) {
str_oct += (str_bin[k] - '0') * 4 + (str_bin[k + 1] - '0') * 2 + str_bin[k + 2];
}
cout << str_oct << endl;
}
return 0;
}
Java
利用Java 内置的进制转换函数
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
String[] str_hex = new String[n];
for(int i=0;i<n;i++) {
str_hex[i] = sc.next();
BigInteger i1 = new BigInteger(str_hex[i],16);
String str = i1.toString(8);
System.out.println(str);
}
}
}