马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大佬们帮帮我吧~非常感谢了!我看了半天也不知道错在哪里(学校的作业)在本地可以通过,但是在PTA里不可以通过,报答案错误
输入一个2进制的数,要求输出该2进制数的16进制表示。在16进制的表示中,A-F表示10-15。 输入格式:第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个以0和1组成的字符串,字符串长度至少是1,至多是10000。 输出格式:n行,每行输出对应一个输入。 #include <stdio.h>
#include <string.h>
char b[100005],x[25001];
int main()
{
int count,sum,len,i;
scanf("%d",&count);
while (count--){
scanf("%s",b);
sum=0;
len=strlen(b);
for (i=0;i<len-1;i++){
sum+=b[i]-'0';
sum*=2;
}
sum+=b[i]-'0';
len=0;
if (sum==0) {
printf("0\n");
continue;
}
while (sum){
if (sum%16<10) {
x[len++]=sum%16+'0';
}
else {
x[len++]=sum%16-10+'A';
}
sum=sum/16;
}
for (len=len-1;len>=0;len--){
printf("%c",x[len]);
}
printf("\n");
}
return 0;
}
本帖最后由 jackz007 于 2022-4-22 17:32 编辑
是的,你从键盘输入的是字符串形式的二进制数,这个字符串的长度绝对不可以超过 64 个字符! #include <stdio.h>
char * bin2hex(char h[] , char b[])
{
char c ;
unsigned long long d , e , i , k ;
for(d = i = 0 ; b[i] ; i ++) d = d * 2 + b[i] - '0' ;
for(e = d , k = 0 ; e ; k ++) e /= 16 ;
h[k --] = '\0' ;
for(; d ; k -- , d /= 16) {
c = d % 16 ;
if(c > 9) h[k] = 'A' + c - 10 ;
else h[k] = '0' + c ;
}
return h ;
}
int main(void)
{
char b[1000][68] , h[1000][20] ;
int i , n ;
scanf("%d" , & n) ;
for(i = 0 ; i < n ; i ++) scanf("%s" , b[i]) ;
for(i = 0 ; i < n ; i ++) printf("%s\n" , bin2hex(h[i] , b[i])) ;
printf("\n") ;
}
|