学习内容
1.蓝桥杯基础练习题
2.记英语
蓝桥杯基础练习题
试题 基础练习 十六进制转八进制
资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
【提示】
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
#include <bits/stdc++.h>
using namespace std;
int main() {
int t, i;
cin >> t;
while (t--) {
string a, b;
cin >> a;
int i;
for (i = 0; a[i] != '\0'; i++) {
switch (a[i]) {
case '0':
b += "0000"; //将16进制转换为二进制
break;
case '1':
b += "0001";
break;
case '2':
b += "0010";
break;
case '3':
b += "0011";
break;
case '4':
b += "0100";
break;
case '5':
b += "0101";
break;
case '6':
b += "0110";
break;
case '7':
b += "0111";
break;
case '8':
b += "1000";
break;
case '9':
b += "1001";
break;
case 'A':
b += "1010";
break;
case 'B':
b += "1011";
break;
case 'C':
b += "1100";
break;
case 'D':
b += "1101";
break;
case 'E':
b += "1110";
break;
case 'F':
b += "1111";
break;
default:
break;
}
}
int n = b.size();
if (n % 3 == 1) //将二进制转换为八进制
b.insert(0, "00"); //insert函数,在0处插入“00”
else if (n % 3 == 2)
b.insert(0, "0");
int flag = 0;
for (i = 0; b[i] != '\0'; i += 3) {
int c;
c = 4 * (b[i] - '0') + 2 * (b[i + 1] - '0') + (b[i + 2] - '0');
if (c)
flag = 1;
if (flag)
cout << c;
}
cout << endl;
}
return 0;
}
英语百词斩
明日计划
1.完成六道左右VIP试题
2.记英语单词
3.预习高数