2进制转化为16进制 ,Runtime Error
2进制转化为16进制 Time Limit:1000MS Memory Limit:65536K
Total Submit:5525 Accepted:1990
Description
输入一个2进制的数,要求输出该2进制数的16进制表示。
在16进制的表示中,A-F表示10-15
Input
第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个以0和1组成的字符串,字符串长度至少是1,至多是10000
Output
n行,每行输出对应一个输入。
Sample Input
2
100000
111
Sample Output
20
7
Source
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "math.h"
int print(int *a)
{
int i,j;
char str[17]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
for(i=0,j=0;a[i]!=-1;i++)
{
j++;
}
for (j--;j>0;j--)
{
i=a[j];
printf("%c",str[i]);
}
printf("\n");
return 1;
}
int change(char *a)
{
int n,i,k,m,j;
double l,x,t=0;
int b[3];
n=strlen(a);
for (i=n-4,k=1;i>-4;i=i-4,k++)
{
for (j=0,x=3;j<4;j++,x--)
{
m=(a[i+j]==49)?1:0;
l=pow (2,x);
t=t+m*l;
}
b[k]=t;
}
b[k]=-1;
print(b);
return 1;
}
int main()
{
int n,m,i,j=0;
char *string;
char a[6];
scanf("%d",&n);
m=10*n;
string=(char *)malloc(m* sizeof(char));
for(i=1;i<=n;i++)
{
scanf("%s",a);
for(m=0;j<6*i;j++,m++)
{
string[j]=a[m];
a[m]='\0';
}
}
j=0;
for(i=1;i<=n;i++)
{
for(m=0;j<6*i;j++,m++)
{
a[m]=string[j];
}
change(a);
}
return 0;
}
Runtime Error
麻烦大家帮忙看一下