问题 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");
}
}
}