题目:
明码
汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛
4 0 4 0 4 0 4 32 -1 -16 4 32 4 32 4 32 4 32 4 32 8 32 8 32 16 34 16 34 32 30 -64 0
16 64 16 64 34 68 127 126 66 -124 67 4 66 4 66 -124 126 100 66 36 66 4 66 4 66 4 126 4 66 40 0 16
4 0 4 0 4 0 4 32 -1 -16 4 32 4 32 4 32 4 32 4 32 8 32 8 32 16 34 16 34 32 30 -64 0
0 -128 64 -128 48 -128 17 8 1 -4 2 8 8 80 16 64 32 64 -32 64 32 -96 32 -96 33 16 34 8 36 14 40 4
4 0 3 0 1 0 0 4 -1 -2 4 0 4 16 7 -8 4 16 4 16 4 16 8 16 8 16 16 16 32 -96 64 64
16 64 20 72 62 -4 73 32 5 16 1 0 63 -8 1 0 -1 -2 0 64 0 80 63 -8 8 64 4 64 1 64 0 -128
0 16 63 -8 1 0 1 0 1 0 1 4 -1 -2 1 0 1 0 1 0 1 0 1 0 1 0 1 0 5 0 2 0
2 0 2 0 7 -16 8 32 24 64 37 -128 2 -128 12 -128 113 -4 2 8 12 16 18 32 33 -64 1 0 14 0 112 0
1 0 1 0 1 0 9 32 9 16 17 12 17 4 33 16 65 16 1 32 1 64 0 -128 1 0 2 0 12 0 112 0
0 0 0 0 7 -16 24 24 48 12 56 12 0 56 0 -32 0 -64 0 -128 0 0 0 0 1 -128 3 -64 1 -128 0 0
思路:
题目说有8个字节,所以定义二进制数组为8,因为题目给的十进制数有正有负,所以要分别就算,可能是我的编译器有问题,不能写dp[qwe]=0 所以我加了1之后又减1,注意负数转二进制要取反加一。(代码有点累赘,但是应该是可以看懂的,只是代表思路,具体实现还要自己思考)
#include"iostream"
#include"algorithm"
using namespace std;
void huahua(int kk){
int i=1;
int j=0;
int pd[8]={0};
int qwe=kk;
int a=abs(qwe);
while(i){
if(a==0){
i=0;
}
pd[j]=a%2;
a=a/2;
j++;
}
if(kk<0){
for(int qyc=0;qyc<8;qyc++){
if(pd[qyc]==1)
pd[qyc]=1;
if(pd[qyc]==0)
pd[qyc]=2;
}
for(int qyc=0;qyc<8;qyc++){
pd[qyc]-=1;
}
pd[0]+=1;
for(int qyc=0;qyc<8;qyc++){
if(pd[qyc]==2){
pd[qyc+1]+=1;
pd[qyc]=0;
}
}
reverse(pd,pd+8);
}
else if(kk>=0){
reverse(pd,pd+8);
}
for(int x=1;x<8;x++){
if(pd[x]==1)
cout<<"*";
else
cout<<" ";
}
}
int main(){
int x;
int abc[10][32];
for(int k=0;k<10;k++)
for(int i=0;i<32;i++){
cin>>abc[k][i];
}
for(int k=0;k<10;k++)
{
for(int i=0;i<32;i++){
huahua(abc[k][i]);
if((i+1)%2==0)
cout<<endl;
}
}
}