题解:P14602 [NWRRC 2025] Compact Encoding
Solil1019
·
·
题解
题目理解
- 将整数的二进制表示按 7 位一组进行分割。
- 每个字节的最高位(第8位)表示是否还有后续字节。
- 第一个字节包含原数的最高有效位。
- 不能以
128(二进制 10000000)开头。
做法
- 特殊情况处理:当输入为 0 时,直接输出 0。
- 7 位分组:将整数的二进制表示按 7 位一组从低位到高位分割。
- 大端序处理:由于编码要求大端序,需要反转字节顺序。
- 设置继续标志:非最后一个字节的最高位置 1,最后一个字节的最高位置 0。
Code
#include <bits/stdc++.h>
using namespace std;
unsigned int n;
vector<unsigned int>b;
int main(){
cin>>n;
if(n==0){//特判 n=0
cout<<0;
return 0;
}
while(n>0){
b.push_back(n&0x7F);//从低位开始,每次取 7 位
n>>=7;
}
for(int i=b.size()-1;i>=0;i--){
if(i>0)cout<<(b[i]|0x80)<<" ";//最后一个字节,最高位置设为 1
else cout<<b[i]<<" ";
}
}