变长编码
思路:
- 按题目要求定义好需要的变量,并实现输入。
- 根据题意,将
n 对应的二进制,每7 位1 组,保存起来。 - 除了包含最高位那组,其他组最前面都增加
1 ,例如中间一组是0001111 ,最前面加1 变10001111 。 - 注意输出是先输出低位的数组,输出内容用
16 进制表示即可。代码呈上:
#include <iostream> using namespace std; long long n; //数字转16进制字符 char trs(int x){ if (x>9){ return x-10+'A'; }else{ return x+'0'; } } int main() { cin>>n; while (n>0){ int t=n&0x7f;//取最后7位 if (n>0x7f){//不是最高段 t|=0x80;//首位加1 } cout<<trs(t>>4)<<trs(t&0xf)<<" "; n=(n>>7);//去掉最后7位 } return 0; }