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)、可能出错:略
 
 
 
posted on 2012-05-02 21:58  谷堆旁边  阅读(673)  评论(0编辑  收藏  举报