01串压缩编码 [SCU – 1120] 题解
简单的模拟,按题目做就行
#include <cstdio> void putIntoMem(int x,char* memPos) { int i; for(i=7;i>=0;i--) { memPos[i]= x&01 ; x>>=1; } } void NumToHex(int currVal,int count) { int res=0; if(currVal==1) { res=0x80; } res|=(count&0x7F); printf("%d",res); } int main(void) { char * memSlice,currVal,initFlag=true; int N,i,x,count; scanf("%d",&N); memSlice=new char [N]; for(i=0;i<N/8;i++) { scanf("%d",&x); putIntoMem(x,memSlice+i*8); } #ifdef MALICVERBOSE for(i=0;i<N;i++) printf("%d",memSlice[i]); printf("\n"); #endif currVal=memSlice[0]; count=0; for(i=0;i<N;i++) { if(memSlice[i]==currVal) count+=1; else { if(initFlag==true) { initFlag=false; } else { printf(" "); } NumToHex(currVal,count); count=1; currVal=memSlice[i]; } } if(initFlag==true) { initFlag=false; } else { printf(" "); } NumToHex(currVal,count); printf("\n"); delete [] memSlice; return 0; }