资源限制
内存限制:512.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
【提示】
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
具体思路给出一个转换函数,先将16进制数字转化为整数,再将整数转化为八进制字符串
看change函数即可
版本一:使用数字来作为中间过程,过多的数据long long完全无法接收。
#include
#include
#include
#include
#include
#include
using namespace std;string change(string& s)
{string res;long long num = 0;int step = 0;for (int i = s.size() - 1; i >= 0; i--){switch (s[i]){case '1':num += 1 * pow(16, step++);break;case '2':num += 2 * pow(16, step++);break;case '3':num += 3 * pow(16, step++);break;case '4':num += 4 * pow(16, step++);break;case '5':num += 5 * pow(16, step++);break;case '6':num += 6 * pow(16, step++);break;case '7':num += 7 * pow(16, step++);break;case '8':num += 8 * pow(16, step++);break;case '9':num += 9 * pow(16, step++);break;case 'A':num += 10 * pow(16, step++);break;case 'B':num += 11 * pow(16, step++);break;case 'C':num += 12 * pow(16, step++);break;case 'D':num += 13 * pow(16, step++);break;case 'E':num += 14 * pow(16, step++);break;case 'F':num += 15 * pow(16, step++);break;}}int m;while (num){m = num % 8;num /= 8;res += '0'+m;// res += to_string(m);}reverse(res.begin(), res.end());return res;
}int main()
{int n;cin >> n;vector v(n);vector res(n);for (int i = 0; i < n; i++){cin >> v[i];string temp = change(v[i]);res[i] = temp;}for (int i = 0; i < n; i++){cout << res[i];cout << endl;}return 0;
}
【解法二】使用16-》2-》8进制
#include
using namespace std;int main()
{int n;cin>>n;for(int i=0; i>sixteen;for(int j=0; j