POJ 2798 2进制转换为16进制
- 时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
- 输入一个2进制的数,要求输出该2进制数的16进制表示。
在16进制的表示中,A-F表示10-15 - 输入
- 第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个以0和1组成的字符串,字符串长度至少是1,至多是10000
- 输出
- n行,每行输出对应一个输入。
- 样例输入
-
2
100000
111
- 样例输出
-
20
7
(1)、源代码:
#include <iostream>
#include <cstring>
using namespace std;
char six[] = "0123456789ABCDEF";
int four[] = {1,2,4,8};
char change(char *tmp,int num){
int i;
char ret = 0;
for(i=0; i<num; i++){
ret += (tmp[i]-'0') * four[num-i-1];
}
return six[ret];
}
int main(){
int n, len, i;
cin >> n;
char num[10010];
while(n-- > 0){
cin >> num;
len = strlen(num), i = 0;
while(len > 0){
int tmp = len % 4;
if(tmp == 0)
tmp = 4;
cout << change(&num[i],tmp);
len -= tmp;
i += tmp;
}
cout << endl;
}
}
(2)、解题思路:略
(3)、可能出错:略