基础练习 十六进制转八进制
时间限制:1.0s 内存限制:512.0MB
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
【提示】
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
分析:
将输入的十六进制转化为对应的二进制,
再将二进制转化为对应的八进制就简单多了
PS:
十六进制输入输出%x(字母部分用小写) 或者 %X(字母部分用大写)
八进制输入输出 %o
十进制输入输出 %d.
(备注:用于这道题数据量较大不能使用简单的数据类型转化解决所有的数据)
C/C++代码实现(AC):
1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #include <cstdio> 5 #include <cmath> 6 #include <stack> 7 #include <map> 8 #include <queue> 9 10 using namespace std; 11 12 int main() 13 { 14 int n; 15 scanf("%d", &n); 16 while(n --) 17 { 18 string str1, str2; 19 cin >>str1; 20 int len = str1.size(); 21 for (int i=0; i<len; ++i) { 22 if (str1[i] == ‘0‘) str2 += "0000"; 23 else if (str1[i] == ‘1‘) str2 += "0001"; 24 else if (str1[i] == ‘2‘) str2 += "0010"; 25 else if (str1[i] == ‘3‘) str2 += "0011"; 26 else if (str1[i] == ‘4‘) str2 += "0100"; 27 else if (str1[i] == ‘5‘) str2 += "0101"; 28 else if (str1[i] == ‘6‘) str2 += "0110"; 29 else if (str1[i] == ‘7‘) str2 += "0111"; 30 else if (str1[i] == ‘8‘) str2 += "1000"; 31 else if (str1[i] == ‘9‘) str2 += "1001"; 32 else if (str1[i] == ‘A‘) str2 += "1010"; 33 else if (str1[i] == ‘B‘) str2 += "1011"; 34 else if (str1[i] == ‘C‘) str2 += "1100"; 35 else if (str1[i] == ‘D‘) str2 += "1101"; 36 else if (str1[i] == ‘E‘) str2 += "1110"; 37 else if (str1[i] == ‘F‘) str2 += "1111"; 38 } 39 40 int len_ = str2.size(); 41 if (len_ % 3 == 1) str2 = "00" + str2; 42 if (len_ % 3 == 2) str2 = "0" +str2; 43 44 int len_now = str2.size(), flag = 0, temp; 45 for (int i = 0; i < len_now; i += 3) 46 { 47 temp = int(str2[i] - ‘0‘) * 4 + int(str2[i + 1] - ‘0‘) * 2 48 + int(str2[i + 2] - ‘0‘); 49 if (temp) flag = 1; 50 if (flag) printf("%d", temp); 51 } 52 printf("\n"); 53 } 54 return 0; 55 }
原文地址:https://www.cnblogs.com/GetcharZp/p/9033654.html
时间: 2024-10-01 01:28:48