标题:2进制转化为16进制 ,Runtime Error
只看楼主
boarbing
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-11-1
 问题点数:0 回复次数:4 
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

麻烦大家帮忙看一下
搜索更多相关主题的帖子: Runtime 进制 
2008-11-16 23:47
风居住的街道
Rank: 1
等 级:新手上路
帖 子:374
专家分:0
注 册:2008-10-24
得分:0 
不知道这个行不行…………

#include <stdio.h>
#include <string.h>

void convert(char *str, int len)
{
    int a = 0, p = 1;
    while (len--)
    {
        if (str[len] == '1')
            a |= p;
        p <<= 1;
    }
    printf("%X", a);
}

int main(void)
{
    int n;

    scanf("%d", &n);
    while (n--)
    {
        char str[10001], *pt;
        scanf("%10000s", str);
        int len = strlen(str), rem = len % 4;
        if (rem != 0)
            convert(str, rem);
        for (pt = &str[rem], len -= rem;
                len > 0; pt += 4, len -= 4)
            convert(pt, 4);
        putchar('\n');
    }
    return 0;
}
2008-11-17 00:34
风居住的街道
Rank: 1
等 级:新手上路
帖 子:374
专家分:0
注 册:2008-10-24
得分:0 
找到一种巧妙的方法解决这个问题……
程序代码:
#include <stdio.h>
#include <string.h>
char str[10004] = "000", *hex = "0123456789ABCDEF";
int main(void)
{
    int n, r;
    scanf("%d", &n);
    while (n--)
    {
        char *pt = &str[3];
        scanf("%10000s", &str[3]);
        if ((r = strlen(&str[3]) % 4) != 0)
            pt -= 4 - r;
        while (*pt != '\0')
        {
            int a = (*pt++ - '0') << 3;
            a |= (*pt++ - '0') << 2;
            a |= (*pt++ - '0') << 1;
            a |= (*pt++ - '0');
            putchar(hex[a]);
        }
        putchar('\n');
    }
    return 0;
}
2008-11-17 01:47
风居住的街道
Rank: 1
等 级:新手上路
帖 子:374
专家分:0
注 册:2008-10-24
得分:0 
………………贴这个程序的时候,突然想到了达夫设备……于是……
程序代码:
#include <stdio.h>
#include <string.h>
int main(void)
{
    int n, r;
    scanf("%d", &n);
    while (n--)
    {
        char str[10001], *pt = str;
        scanf("%10000s", str);
        switch(r = 0, strlen(str) % 4)
        {
            do {
            case 0: r |= (*pt++ - '0') << 3;
            case 3: r |= (*pt++ - '0') << 2;
            case 2: r |= (*pt++ - '0') << 1;
            case 1: r |= (*pt++ - '0');
                putchar((r < 10 ? '0' : 55) + r);
            } while (r = 0, *pt != '\0');
        }
        putchar('\n');
    }
    return 0;
}


于是,省下来三个字节- -

[[it] 本帖最后由 风居住的街道 于 2008-11-17 02:03 编辑 [/it]]
2008-11-17 01:57
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:0 
很好很强大

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2008-11-17 11:05



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-244694-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.892970 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved