输入一个十进制数 N,将它转换成二进制与十六进制分别输出。
Input
第 1 行:整数 T (1≤T≤10) 为问题数。
第 2 ∽ T+1 行:每一个问题中要转换的十进制数 N (0≤N≤1 000 000)。
Output
对于每个问题,输出一行问题的编号(0 开始编号,格式:case #0:
等),然后在一行中输出对应的二进制与十六进制,用空格隔开。十六进制中 10 用 A
表示,依次类推。
#include <iostream> #include <stdio.h> using namespace std; int t=0; char hex_list[36]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'}; void solve(int num); int main () { int T; scanf("%d", &T); while(T--){ int num; cin >> num; solve(num); } } int convert(int p, int from, int *to) { int i=0; do { to[i++] = from % p; from /= p; } while ( from > 0 ); return i; } void solve(int num) { int bin[1000], hex[1000]; int i = convert(2,num,bin); int j = convert(16,num,hex); int reverse_bin[1000]; int reverse_hex[1000]; printf("case #%d\n", t++); for (int k = 0; k < i; k++){ reverse_bin[k] = bin[i - k - 1]; } for (int k = 0; k < j; k++){ reverse_hex[k]= hex[j - k - 1]; } for (int k = 0; k < i; k++) cout << reverse_bin[k]; cout << ' '; for (int k = 0; k < j; k++) cout << hex_list[reverse_hex[k]]; cout << endl; }