2018年蓝桥杯省赛B组:明码
题目就不复制了,大概就是,给了你10行数据,每行32个数。要求将这些数据转化成二进制,即明码,每一行数据排列成16*16,即可以看到一个汉字。
其实excel也可以做,但是数字需要自己敲上去就有点麻烦
#include<stdio.h>
int er(int n);//转换成二进制
int b(int n);//变成标准的8位
int main(void){
int n;
int i;
int a[32];
for(i=1;i<33;i++){ //存储32个数据
scanf("%d",&a[i]);
};
for(i=1;i<33;i++){ //32个数据进行转换
if(a[i]<0){ //负数转化成正数
a[i]=-a[i];
}
b(a[i]);
er(a[i]);
if(i>0 && i%2==0){ //没16个字节为一行
printf("\n");
}
}
return 0;
}
int b(int n){
if(n==0 || n==1){
printf("0000000");
}
if(n>1 && n<=3){
printf("000000");
}
if(n>3 && n<=7){
printf("00000");
}
if(n>7 && n<=15){
printf("0000");
}
if(n>15 && n<=31){
printf("000");
}
if(n>31 && n<=63){
printf("00");
}
if(n>63 && n<=127){
printf("0");
}
}
int er(int n){ //C Primer Plus书上看到的,比较简短的方法
if(n==0){
printf("0");
return;
}
int t;
t=n%2;
if(n!=1){
er(n/2); //递归
}
putchar((t==0?'0':'1')); //这样正好就是从下往上的
return 0;
}
从今天开始坚持刷题啦,每天进步一点点!