一道acm的练习题 出点毛病请指点绝对结贴
输入数据
第一行为一个整数m,表示测试用列数;接下来有m行,每一行表示一个测试用例,每个测试用例为一个以H结尾的十六进制的整数n。
输出数据
十六进制整数n对应的二进制数在一行输出,多个测试结果顺序输出,之间没有空行,整数前不加无效的0.
输入样例
2
225H
F8H
输出样例
1001010101
11111000
下面是我编写的总是在输出二进制的开头会出现问题
#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;}
#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;}
#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;}
[解决办法]
#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;}