马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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") ;
- }
复制代码
|