网站是什么字体,不用代码做交互式网站,怎么做网站中英文版本,个人介绍微电影网站模板【华为OD-E卷 - 整数编码 100分#xff08;python、java、c、js、c#xff09;】
题目
实现一种整数编码方法#xff0c;使得待编码的数字越小#xff0c;编码后所占用的字节数越小。 编码规则如下: 编码时7位一组#xff0c;每个字节的低7位用于存储待编码数字的补码 字…【华为OD-E卷 - 整数编码 100分python、java、c、js、c】
题目
实现一种整数编码方法使得待编码的数字越小编码后所占用的字节数越小。 编码规则如下: 编码时7位一组每个字节的低7位用于存储待编码数字的补码 字节的最高位表示后续是否还有字节置1表示后面还有更多的字节置0表示当前字节为最后一个字节。 采用小端序编码低位和低字节放在低地址上。 编码结果按16进制数的字符格式输出小写字母需转换为大写字母
输入描述
输入的为一个字符串表示的非负整数
输出描述
输出一个字符串表示整数编码的16进制码流
备注
待编码的数字取值范围为[0164 - 1]
用例
用例一
输入
0输出
00用例二
输入
100输出
64用例三
输入
1000输出
E807说明 1000的二进制表示为0011 1110 1000至少需要两个字节进行编码;
第一个字节最高位置1剩余的7位存储数字1000的第一个低7位 (1101000)所以第一个字节的二进制为1110 1000即E8;
第二个字节最高位置0剩余的7位存储数字1000的第二个低7位 (0000111)所以第一个字节的二进制为0000 0111即07;
采用小端序编码所以低字节E8输出在前高字节07输出在后。
python解法
解题思路该问题是将一个整数编码为变长的字节序列其中每个字节的最高位是一个标志位表示后续字节是否存在。具体来说使用7位来表示数值剩余的1位用作标志位来表示是否还有后续字节。每次编码后若数值还大于等于128即7位无法完全表示则需要继续编码。最终返回的结果是这些字节的十六进制表示。
对于每个数值取低7位作为当前字节的值通过与0x7F按位与操作获得然后将这个字节的最高位设为1通过按位或操作表示后续还有字节。 当数值变小到小于128时停止编码将其直接以十六进制格式返回
def encode_number(num):res [] # 用于保存每个编码后的字节while num 128: # 当数字大于等于128时需要继续编码# 通过num 0x7F 获取低7位0x80表示设置字节的最高位为1res.append(f{(num 0x7F) | 0x80:02X}) # 格式化为2位的十六进制数添加到结果列表num 7 # 将num右移7位为编码下一段数值做准备# 最后一个字节直接以低7位表示无需设置最高位res.append(f{num:02X}) # 格式化为2位的十六进制数添加到结果列表return .join(res) # 将所有字节拼接成一个字符串并返回# 输入整数进行编码并输出结果
num int(input()) # 从用户输入读取一个整数
print(encode_number(num)) # 调用encode_number函数进行编码并打印结果
java解法
解题思路该问题是将一个 long 类型的整数编码为变长的字节序列其中每个字节的最高位是一个标志位用来表示是否还有后续字节。每个字节的低7位用来表示数值的部分。根据编码规则处理的过程如下
每个字节的构成 对于一个整数将其分解为多个字节。每个字节表示 7 位数值最高位即第8位用作标志位表示后续是否还有字节。如果某个字节的最高位是 1说明后面还有字节。如果是 0表示这是最后一个字节。
过程
将整数按 7 位拆分。 对于每个拆分出来的部分设置其最高位为 1表示后面还有字节直到没有更多的数值需要编码。 当数值小于 128 时设置该字节的最高位为 0表示这是最后一个字节。 通过按位操作逐步提取每个字节并拼接结果。 编码输出 编码后的结果是一个十六进制的字符串表示每个字节
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in); // 创建Scanner对象用于读取输入long val in.nextLong(); // 读取一个long类型的数值Encoder enc new Encoder(); // 创建Encoder对象System.out.println(enc.encode(val)); // 调用Encoder的encode方法输出编码结果}
}class Encoder {// 编码方法将long类型的val编码为变长字节序列public String encode(long val) {StringBuilder sb new StringBuilder(); // 用于构建编码后的字符串boolean cont true; // 标志位表示是否还需要继续编码// 当还需要继续编码时while (cont) {// 获取val的低7位使用int类型保存低7位用来表示字节的内容int num (int) (val 0x7F);val 7; // 无符号右移7位为下一次编码做准备// 如果val还有剩余的数值则设置当前字节的最高位为1if (val ! 0) {num | 0x80; // 设置最高位为1表示后续还有字节} else {cont false; // 如果val已经处理完停止编码}// 将当前字节num以2位大写十六进制格式添加到StringBuilder中sb.append(String.format(%02X, num));}return sb.toString(); // 返回编码后的十六进制字符串}
}
C解法
解题思路该问题的目标是将一个给定的 long long 类型整数编码成一个变长字节流每个字节由7位数据和1位标志位组成。具体规则是
字节格式每个字节的最低7位用来存储数据而最高1位用来作为标志位表示是否还有后续字节。如果最高位为 1表示还有更多字节如果为 0表示没有后续字节。 拆分流程 将整数转换为二进制字符串。 按照每7位一组将其拆分。 对每一组数据若不为最后一组则设置最高位为 1表示后续还有字节否则设置为 0表示结束。 结果表示将每个字节转为十六进制字符串并拼接成最终的编码结果
#include iostream
#include string
#include bitset
#include sstream
#include iomanipusing namespace std;// 将二进制字符串转换为十六进制字符串
string getHexString(const string binStr) {int hexValue stoi(binStr, nullptr, 2); // 将二进制字符串转换为十进制整数stringstream ss; // 创建字符串流// 将整数输出为十六进制格式宽度为2若不足两位前补零且使用大写字母ss hex uppercase setw(2) setfill(0) hexValue;return ss.str(); // 返回转换后的十六进制字符串
}// 获取结果将long long类型的num转换为变长编码的十六进制字符串
string getResult(long long num) {// 将num转换为64位的二进制字符串string bin bitset64(num).to_string();// 去掉二进制字符串前面的0保留有效的二进制部分bin bin.substr(bin.find(1)); stringstream ans; // 用于保存编码后的十六进制结果int end bin.length(); // 获取二进制字符串的长度// 按7位一组地处理二进制字符串while (end - 7 0) {// 获取当前的7位数据并在其前面加上1表示后面还有数据ans getHexString(1 bin.substr(end - 7, 7)); end - 7; // 更新剩余处理的二进制数据长度}// 处理最后不足7位的二进制数据if (end 0) {ans getHexString(bin.substr(0, end)); // 最后一个字节无需添加最高位的1}return ans.str(); // 返回编码后的十六进制字符串
}int main() {long long num; // 定义long long类型的输入cin num; // 读取输入的数字cout getResult(num) endl; // 调用getResult函数并输出结果return 0;
}
C解法 解题思路
更新中JS解法 解题思路 这个问题是将一个大整数通过字符串输入编码为变长字节流并返回其十六进制表示。每个字节包含7位数据和1位标志位。每个字节的标志位最高位用来指示是否还有后续字节规则如下
字节构成
每个字节包含 7 位数据低7位和 1 位标志位最高位。 若当前字节的标志位为 1表示后续还有字节需要编码若为 0表示当前字节是最后一个字节。 编码过程
将输入的整数转为 BigInt 类型处理大整数。 使用 while 循环按 7 位拆分整数并为每个字节设置标志位。 将所有字节转换为十六进制并拼接成最终的结果。 输出
返回变长编码的十六进制字符串确保每个字节都以两位十六进制表示不足两位前补零
const readline require(readline); // 引入 readline 模块用于读取标准输入// 创建 readline 接口
const rl readline.createInterface({input: process.stdin, // 从标准输入读取output: process.stdout, // 输出到标准输出
});// 监听每一行输入
rl.on(line, (line) {console.log(encodeNumber(line)); // 每输入一行调用encodeNumber进行编码并打印输出
});// 编码函数将输入的数字字符串形式编码为变长字节流的十六进制字符串
function encodeNumber(numStr) {let num BigInt(numStr); // 将输入的字符串转为 BigInt 类型支持大整数const result []; // 用于存储每个字节编码后的字节// 循环处理每个字节while (num 0) {let byte Number(num 0x7Fn); // 获取 num 的最低7位即低7位并将其转换为普通数字num 7n; // 将 num 右移 7 位准备处理下一部分数据if (num 0) {byte | 0x80; // 如果 num 仍然大于 0说明后续还有字节设置当前字节的最高位为1}result.push(byte); // 将当前字节加入结果数组}// 处理 num 为 0 的情况if (result.length 0) {result.push(0); // 如果输入是0结果数组中应该只有一个字节值为0}// 将每个字节转换为十六进制字符串并拼接成最终的结果return result.map(byte byte.toString(16).padStart(2, 0).toUpperCase()).join();
}
注意
如果发现代码有用例覆盖不到的情况欢迎反馈会在第一时间修正更新。 解题不易如对您有帮助欢迎点赞/收藏 文章转载自: http://www.morning.yrhd.cn.gov.cn.yrhd.cn http://www.morning.qpqcq.cn.gov.cn.qpqcq.cn http://www.morning.yznsx.cn.gov.cn.yznsx.cn http://www.morning.hqlnp.cn.gov.cn.hqlnp.cn http://www.morning.rttxx.cn.gov.cn.rttxx.cn http://www.morning.jykzy.cn.gov.cn.jykzy.cn http://www.morning.xwrhk.cn.gov.cn.xwrhk.cn http://www.morning.pshtf.cn.gov.cn.pshtf.cn http://www.morning.wjhpg.cn.gov.cn.wjhpg.cn http://www.morning.yxlhz.cn.gov.cn.yxlhz.cn http://www.morning.ngqdp.cn.gov.cn.ngqdp.cn http://www.morning.kdbcx.cn.gov.cn.kdbcx.cn http://www.morning.cnyqj.cn.gov.cn.cnyqj.cn http://www.morning.tnwgc.cn.gov.cn.tnwgc.cn http://www.morning.wxqmc.cn.gov.cn.wxqmc.cn http://www.morning.pcgmw.cn.gov.cn.pcgmw.cn http://www.morning.qrqg.cn.gov.cn.qrqg.cn http://www.morning.mnwb.cn.gov.cn.mnwb.cn http://www.morning.qzsmz.cn.gov.cn.qzsmz.cn http://www.morning.elsemon.com.gov.cn.elsemon.com http://www.morning.skfkx.cn.gov.cn.skfkx.cn http://www.morning.kdnrc.cn.gov.cn.kdnrc.cn http://www.morning.bnwlh.cn.gov.cn.bnwlh.cn http://www.morning.mnbgx.cn.gov.cn.mnbgx.cn http://www.morning.gthc.cn.gov.cn.gthc.cn http://www.morning.qhmql.cn.gov.cn.qhmql.cn http://www.morning.rglzy.cn.gov.cn.rglzy.cn http://www.morning.cmfkp.cn.gov.cn.cmfkp.cn http://www.morning.rpms.cn.gov.cn.rpms.cn http://www.morning.nypgb.cn.gov.cn.nypgb.cn http://www.morning.dskmq.cn.gov.cn.dskmq.cn http://www.morning.rtkz.cn.gov.cn.rtkz.cn http://www.morning.wsyq.cn.gov.cn.wsyq.cn http://www.morning.mjbkp.cn.gov.cn.mjbkp.cn http://www.morning.zsyrk.cn.gov.cn.zsyrk.cn http://www.morning.hpcpp.cn.gov.cn.hpcpp.cn http://www.morning.jcxzq.cn.gov.cn.jcxzq.cn http://www.morning.ltpmy.cn.gov.cn.ltpmy.cn http://www.morning.rlbfp.cn.gov.cn.rlbfp.cn http://www.morning.qhrlb.cn.gov.cn.qhrlb.cn http://www.morning.gcysq.cn.gov.cn.gcysq.cn http://www.morning.jtybl.cn.gov.cn.jtybl.cn http://www.morning.qpqwd.cn.gov.cn.qpqwd.cn http://www.morning.pypqf.cn.gov.cn.pypqf.cn http://www.morning.stxg.cn.gov.cn.stxg.cn http://www.morning.dqcpm.cn.gov.cn.dqcpm.cn http://www.morning.ndxrm.cn.gov.cn.ndxrm.cn http://www.morning.ymfzd.cn.gov.cn.ymfzd.cn http://www.morning.knsmh.cn.gov.cn.knsmh.cn http://www.morning.fgxnb.cn.gov.cn.fgxnb.cn http://www.morning.hrrmb.cn.gov.cn.hrrmb.cn http://www.morning.lbxhy.cn.gov.cn.lbxhy.cn http://www.morning.syrzl.cn.gov.cn.syrzl.cn http://www.morning.fdwlg.cn.gov.cn.fdwlg.cn http://www.morning.qxwrd.cn.gov.cn.qxwrd.cn http://www.morning.wbrf.cn.gov.cn.wbrf.cn http://www.morning.hrpjx.cn.gov.cn.hrpjx.cn http://www.morning.tqrbl.cn.gov.cn.tqrbl.cn http://www.morning.mhwtq.cn.gov.cn.mhwtq.cn http://www.morning.lizimc.com.gov.cn.lizimc.com http://www.morning.zqxhn.cn.gov.cn.zqxhn.cn http://www.morning.hhxpl.cn.gov.cn.hhxpl.cn http://www.morning.qsszq.cn.gov.cn.qsszq.cn http://www.morning.hjssh.cn.gov.cn.hjssh.cn http://www.morning.gcqkb.cn.gov.cn.gcqkb.cn http://www.morning.kntbk.cn.gov.cn.kntbk.cn http://www.morning.xscpq.cn.gov.cn.xscpq.cn http://www.morning.bmtyn.cn.gov.cn.bmtyn.cn http://www.morning.jnhhc.cn.gov.cn.jnhhc.cn http://www.morning.glkhx.cn.gov.cn.glkhx.cn http://www.morning.rnygs.cn.gov.cn.rnygs.cn http://www.morning.chmcq.cn.gov.cn.chmcq.cn http://www.morning.kntbk.cn.gov.cn.kntbk.cn http://www.morning.kpcxj.cn.gov.cn.kpcxj.cn http://www.morning.bhwz.cn.gov.cn.bhwz.cn http://www.morning.mygbt.cn.gov.cn.mygbt.cn http://www.morning.ltywr.cn.gov.cn.ltywr.cn http://www.morning.gmdtk.cn.gov.cn.gmdtk.cn http://www.morning.ltpzr.cn.gov.cn.ltpzr.cn http://www.morning.gftnx.cn.gov.cn.gftnx.cn