加载中...

浙江理工大学入队200题——13J

问题 J: 零基础学C/C++145——进制转换II

题目描述

给定一个二进制表示的非负整数,将其转换为十六进制数。

输入

输入数据有多组,第一行为数据的组数T,接下来有T组数据。
每组数据占一行,每行为一个二进制整数(不含多余的前导0),最多1000位。

输出

输出对应的十六进制数,字母用大写表示。

样例输入 Copy

2
1111
10100100

样例输出 Copy

F
A4

题解

前面有一道n进制转r进制,如果你会了,那这题easyk的。
我们需要求余数来判断或者开数组,来模拟每四个二进制数xxxx换算成一位十六进制数,10为A,11为B···

代码(AC)

点击查看代码
#include <stdio.h>
#include <string.h>
#include <math.h>
int main()
{
        int T;
	while (scanf("%d",&T)!=EOF)
        {
		while (T--)
		{ 
			char str[1040],b[1040];
			scanf("%s",str); 
			int n=strlen(str)-1;
			int flag=0,i,m=1,sum=0,k=0;
			for (i=n;i>=0;i--)
			{ 
				sum+=(str[i]-'0')*m;
				m*=2; 
				flag++;
				if (flag%4==0||i==0)
				{ 
					if (sum>=10) b[k++]=sum-10+'A';
					else b[k++]=sum+'0';
					m=1; 
					sum=0; 
				}
			}
			for (i=k-1;i>=0;i--)printf("%c",b[i]);
			printf("\n"); 
		}
	}	
}

posted @ 2022-10-29 19:58  shany212  阅读(81)  评论(0编辑  收藏  举报