当前位置: 首页 > news >正文

2025-12-13:十六进制和三十六进制转化。用go语言,给定一个整数 n,先求它的平方并把该值用大写字母的 16 进制表示(符号位按需处理,数位使用 0–9 与 A–F),再求它的立方并将该值用大

2025-12-13:十六进制和三十六进制转化。用go语言,给定一个整数 n,先求它的平方并把该值用大写字母的 16 进制表示(符号位按需处理,数位使用 0–9 与 A–F),再求它的立方并将该值用大写字母的 36 进制表示(数位使用 0–9 与 A–Z)。

最后将这两个进制字符串按顺序拼接,作为函数的返回结果。

1 <= n <= 1000。

输入:n = 13。

输出: “A91P1”。

解释:

n * n = 13 * 13 = 169。在十六进制中,它转换为 (10 * 16) + 9 = 169,对应于 “A9”。

n * n * n = 13 * 13 * 13 = 2197。在三十六进制中,它转换为 (1 * 362) + (25 * 36) + 1 = 2197,对应于 “1P1”。

连接两个结果得到 “A9” + “1P1” = “A91P1”。

题目来自力扣3602。

分步过程描述

  1. 给定整数 n = 13
    计算它的平方:
    ( n^2 = 13 \times 13 = 169 )

  2. 平方值转换为十六进制

    • 调用toRadix(169, 16)
    • 169 除以 16 的商和余数依次是:
      • 169 ÷ 16 = 10 余 9
      • 10 ÷ 16 = 0 余 10
    • 余数映射到十六进制字符:9 → ‘9’,10 → ‘A’
    • 余数收集的顺序是从低位到高位(9, 10),即 “9A”,但最后要反转,所以得到 “A9”。
  3. 计算立方
    ( n^3 = 13 \times 13 \times 13 = 2197 )

  4. 立方值转换为三十六进制

    • 调用toRadix(2197, 36)
    • 2197 除以 36 的步骤:
      • 2197 ÷ 36 = 61 余 1
        • 余数 1 → ‘1’
      • 61 ÷ 36 = 1 余 25
        • 余数 25 → ‘Z’?不对,要检查字母映射:
          余数 0–9 → ‘0’–‘9’,余数 10 → ‘A’,余数 11 → ‘B’,…,余数 25 → 10+15 = 第 16 个字母? 10→A(0), 11→B(1), …, 25 是 10+15,所以余数 25 是 10(A)+15 = 第 16 个字母是 P。
          验证:余数 10 → ‘A’,11 → ‘B’,12 → ‘C’,…,25 → ‘A’ + 15 = ‘P’ ✅
      • 1 ÷ 36 = 0 余 1
        • 余数 1 → ‘1’
    • 从低位到高位余数为 1, 25, 1,反转后是 1, 25, 1 → 字符 ‘1’, ‘P’, ‘1’ → 字符串 “1P1”。
  5. 拼接结果

    • 十六进制部分 “A9” + 三十六进制部分 “1P1” → “A91P1”

复杂度分析

假设 ( n ) 给定,平方和立方计算是 ( O(1) )。

  • 进制转换时,循环次数取决于数字在相应进制下的位数,最坏情况出现在 ( n = 1000 ):
    • 平方最大是 ( 10^6 ),十六进制下约 5 位。
    • 立方最大是 ( 10^9 ),三十六进制下约 6 位。
    • 每次循环是常数时间操作。

时间复杂度
每次转换的位数是 ( O(\log M) ),这里 M 是 ( n^2 ) 或 ( n^3 )。由于输入 n ≤ 1000,位数不超过常数范围,所以可视为 ( O(1) )。但通常按大 O 表示法,是 ( O(\log n) )。

空间复杂度
主要是strings.Builder存储的字符串长度,以及反转时用的[]rune临时空间。额外空间与结果字符串长度成线性,结果字符串长度是 ( O(\log n) )。

结论

  • 总时间复杂度:( O(\log n) )(但 n ≤ 1000 时可看作 ( O(1) ))
  • 总额外空间复杂度:( O(\log n) )(存储转换结果所需空间)

Go完整代码如下:

packagemainimport("fmt""strings")funcconcatHex36(nint)string{h:=n*n ans:=toRadix(h,16)h=n*n*n ans+=toRadix(h,36)returnans}functoRadix(num,radixint)string{ifnum==0{return"0"}varbuilder strings.Builderfornum>0{rem:=num%radixvarchbyteifrem<10{ch=byte('0'+rem)}else{ch=byte('A'+rem-10)}builder.WriteByte(ch)num/=radix}// 反转字符串runes:=[]rune(builder.String())fori,j:=0,len(runes)-1;i<j;i,j=i+1,j-1{runes[i],runes[j]=runes[j],runes[i]}returnstring(runes)}funcmain(){n:=13result:=concatHex36(n)fmt.Println(result)}

Python完整代码如下:

# -*-coding:utf-8-*-defto_radix(num:int,radix:int)->str:"""将十进制整数转换为指定进制的字符串表示"""ifnum==0:return"0"digits=[]whilenum>0:rem=num%radixifrem<10:digits.append(chr(ord('0')+rem))else:digits.append(chr(ord('A')+rem-10))num//=radixreturn''.join(reversed(digits))defconcat_hex36(n:int)->str:"""返回 n^2 的十六进制字符串与 n^3 的三十六进制字符串的拼接"""h=n*n ans=to_radix(h,16)h=n*n*n ans+=to_radix(h,36)returnansdefmain():n=13result=concat_hex36(n)print(result)if__name__=="__main__":main()

C++完整代码如下:

#include<iostream>#include<string>std::stringto_radix_no_reverse(intnum,intradix){if(num==0)return"0";// 计算最大可能位数inttemp=num;intdigits=0;while(temp>0){temp/=radix;digits++;}// 从最高位开始构建std::stringresult(digits,'\0');for(inti=digits-1;i>=0;--i){intrem=num%radix;result[i]=(rem<10)?('0'+rem):('A'+rem-10);num/=radix;}returnresult;}intmain(){intn=13;std::string hex_part=to_radix_no_reverse(n*n,16);std::string base36_part=to_radix_no_reverse(n*n*n,36);std::cout<<hex_part+base36_part<<std::endl;return0;}

http://www.rkmt.cn/news/89864.html

相关文章:

  • 39、Linux内核内存管理:固定映射地址与ioremap解析
  • 重磅发布:Qwen3-VL-8B-Instruct-FP8模型震撼登场,开启多模态AI应用新纪元
  • ollama v0.13.3 最新发布:新增模型与功能优化详细解读
  • 38、互联网邮件安全与Web服务器安全综合指南
  • 百度开源再放大招:ERNIE-4.5-VL-28B-A3B-Thinking颠覆多模态AI认知边界
  • 43、保障Web与文件服务安全:技术、挑战与应对策略
  • C++--哈希封装my_unordered_set和my_unordered_map
  • 一个卷积后就做池化还是多个卷积后做池化?
  • 智谱AI开源GLM-4-9B-Chat-1M:突破200万中文字符上下文壁垒,多模态能力引领行业新标杆
  • NCMconverter:解锁网易云音乐格式限制的终极解决方案
  • 知网AIGC检测原理是什么?知网AI率检测严格吗?
  • 论文降重与AIGC痕迹消除:当学术写作遇见宏智树AI学术
  • 液态智核V2震撼发布:重新定义边缘设备生成式AI体验
  • 斯坦福新框架AgentFlow突破AI决策瓶颈:模块化设计与Flow-GRPO训练法引领智能代理新范式
  • Kakao开源轻量级多模态模型Kanana-V:重新定义小参数视觉语言模型性能边界
  • Qwen3-235B-A22B-Instruct-2507震撼登场:256K超长上下文开启AI全场景应用新纪元
  • DeepSeek-Coder-V2-Instruct-0724强势登榜Aider LLM排行第二,技术突破引领代码大模型新高度
  • 18、Linux系统文件共享与安全防护指南
  • 21、Linux系统高级管理技巧全解析
  • 22、高级系统管理与故障排除技巧
  • Cesium快速入门16:Primitive多个实体与颜色修改
  • C语言实现堆排序(附带源码)
  • 后台任务与WebSocket实时应用
  • SQL分析函数`ROW_NUMBER`的兼容性与深度解析
  • Elasticsearch 的倒排索引原理
  • 一口气看懂 Android 操作系统架构 ——从“高层 App”一路挖到 “内核深处”
  • Kubernetes Master 节点核心组件全景解析
  • SolidWorks特征阵列类型及应用介绍
  • 2025年大语言模型生态全景:从技术突破到行业落地的多元发展态势
  • Python asyncio:解锁异步编程的魔法钥匙