ECNU OJ 2966 二进制与十六进制

输入一个十进制数 N,将它转换成二进制与十六进制分别输出。

Input

1 行:整数 T (1T10) 为问题数。

2T+1 行:每一个问题中要转换的十进制数 N (0N1 000 000)

Output

对于每个问题,输出一行问题的编号(0 开始编号,格式:case #0: 等),然后在一行中输出对应的二进制与十六进制,用空格隔开。十六进制中 10A 表示,依次类推。

#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;
    
}

 

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注