概述
题目链接:https://www.hpuoj.com/contest/16/problem/B/
B. Asia区域制
单测试点时限: 1.0 秒
内存限制: 512 MB
二进制数据是用 0 和 1 两个数码来表示的数.它的基数为 2 ,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现.
十六进制(简写为hex或下标 16 )在数学中是一种逢 16 进 1 的进位制.一般用数字 0 到 9 和字母 ? 到 ?(或 ? ~ ? )表示,其中: ? ~ ? 表示 10 ~ 15 ,这些称作十六进制数字.
请将给定的二进制数转为十六进制数,英文字母使用小写形式.
输入
第一行一个正整数 ?, 代表有 ? 组测试数据. (1≤?≤10).
接下来 ? 行,每行输入一串只包含 0
和 1
的字符串(无前导 0),字符串长度:1≤?????ℎ≤106.
输出
对于每组测试样例,输出转化后的十六进制数并单独占一行.
样例
input
2 1 10
output
1 2
解题思路:
二进制转十六进制,从后面开始,每4位为一个十六进制数,不足4位前面补0.
直接模拟
#include <iostream> #include <cstring> #include <cstdio> using namespace std; char str[100000+100]; char num[100]="0123456789abcdef"; void cal(int pos) { int res = 0; if (pos <= 0) {//小于等于4位 for (int i= 0;i<pos+4;i++) { res = res * 2 + (str[i] - '0'); } printf("%c",num[res]); return; } cal(pos-4); res = 0; for (int i = pos; i < pos + 4; i++) { res = res * 2 + (str[i] - '0'); } printf("%c",num[res]); } int main() { int t; cin >> t; while (t--) { cin >> str; int len = strlen(str); cal(len-4); printf("n"); } return 0; }
转载于:https://www.cnblogs.com/SJCHEN/p/10637679.html
最后
以上就是彪壮橘子为你收集整理的B. Asia区域制的全部内容,希望文章能够帮你解决B. Asia区域制所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复