首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一道acm的练习题 出点毛病请指点绝对结贴,该怎么解决

2012-05-06 
一道acm的练习题 出点毛病请指点绝对结贴输入数据第一行为一个整数m,表示测试用列数;接下来有m行,每一行表

一道acm的练习题 出点毛病请指点绝对结贴
输入数据
  第一行为一个整数m,表示测试用列数;接下来有m行,每一行表示一个测试用例,每个测试用例为一个以H结尾的十六进制的整数n。
输出数据
  十六进制整数n对应的二进制数在一行输出,多个测试结果顺序输出,之间没有空行,整数前不加无效的0.
输入样例
2
225H
F8H
输出样例
1001010101
11111000


下面是我编写的总是在输出二进制的开头会出现问题

C/C++ code
#include<stdio.h>int main(){    int a,b,c,d,m,i,j,n,f,g;    printf("请输入一个数m:");    scanf("%d",&m);    for(i=0;i<m;i++)    {        printf("请输入一个16进制数");        scanf("%x",&a);        g=getchar();        b=a;        for(j=0;a!=0;j++)            a=a/2;        for(n=0;n<j;n++)        {            for(f=0;f<j-n;f++)            {                c=a%2;                a=a/2;            }            a=b;            printf("%d",c);        }        printf("\n");    }    return 0;}

然后我试着改了一下 似乎成立了 结果一试发现输入f8h是对的 225h是错的
C/C++ code
#include<stdio.h>int main(){    int a,b,c,d,m,i,j,n,f,g;    printf("请输入一个数m:");    scanf("%d",&m);    for(i=0;i<m;i++)    {        printf("请输入一个16进制数");        scanf("%x",&a);        g=getchar();        b=a;        d=0;        for(j=0;a!=0;j++)            a=a/2;        for(n=0;n<j;n++)        {            for(f=0;f<j-n;f++)            {                c=a%2;                a=a/2;            }            d++;            if(d==1)                c++;            a=b;            printf("%d",c);        }        printf("\n");    }    return 0;}

希望大神在小弟的基础上修改 这样我能看懂一点 如果我的算法本身就错误无法修改 希望给出的答案尽量简化表明注释 符合要求一定给分

[解决办法]
楼主,搞了好久才发现,你的第一样例是错的:
225H 二进制应该 为 001000100101 吧,即 1000100101

另外说一下,ACM中是不要提示输入的语句的吧,附个我的代码:

C/C++ code
#include<stdio.h>#include<string.h>#include<stdlib.h>int main(){    int a,b,c,d,m,i,j,n,f,g;    char str[100];    printf("请输入一个数m:");    scanf("%d",&m);    for(i=0;i<m;i++)    {        printf("请输入一个16进制数");        scanf("%x",&a);        getchar();        printf("%d\n", a);        memset(str, 0, sizeof(str));        itoa(a, str, 2);        printf("%s\n", str);    }    return 0;}
[解决办法]
探讨

C/C++ code

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

void s2bin(unsigned char num, char *str)
{
char *bin[] = {"0", "1", "10", "11", "100",
"101", "110", "111", "1000", "1001",
……

[解决办法]
C/C++ code
#include <stdio.h>void print(int n, int i){    if (i <= n) {        print(n, i << 1);        printf("%1d", n&i && 1);    }}int main(){    unsigned int n;    int m;    scanf("%d", &m);    while (m--) {        scanf("%x", &n);                print(n, 1);        putchar('\n');    }    return 0;} 

热点排行