news 2026/4/29 5:20:35

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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;}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/28 3:19:36

46、FTP 服务安全配置与 vsftpd 使用指南

FTP 服务安全配置与 vsftpd 使用指南 1. ProFTPD 基础配置指令 在配置 ProFTPD 时,有几个重要的基础指令需要了解: - MaxClientsPerHost :该指令假设合法用户倾向于使用唯一的 IP 地址。如果预计情况并非如此,可以将该指令设置为一个相对较高的数字(例如 50),或者不…

作者头像 李华
网站建设 2026/4/23 19:34:44

48、高效安全的文件传输:rsync 全方位指南(上)

高效安全的文件传输:rsync 全方位指南(上) 在当今数字化的时代,文件传输是一项日常且重要的任务。而 rsync 作为一款强大且智能的文件传输工具,因其独特的算法和丰富的功能特性,成为了众多用户的首选。下面将详细介绍 rsync 的工作原理、获取安装、使用方法以及服务器配…

作者头像 李华
网站建设 2026/4/24 7:53:18

破局显存困境:Qwen3-8B-MLX-6bit量化模型引领AI部署新革命

破局显存困境&#xff1a;Qwen3-8B-MLX-6bit量化模型引领AI部署新革命 【免费下载链接】Qwen3-8B-MLX-6bit 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen3-8B-MLX-6bit 在人工智能大模型应用全面爆发的当下&#xff0c;开发者正普遍面临一个棘手难题&#x…

作者头像 李华
网站建设 2026/4/29 1:12:47

53、使用Swatch进行自动化日志监控

使用Swatch进行自动化日志监控 1. logrotate的运行 通常, logrotate 由 /etc/cron.daily/logrotate 脚本调用,该脚本仅包含一个命令: /usr/sbin/logrotate /etc/logrotate.conf这并不一定意味着日志会每天轮转,而是 logrotate 每天会根据其配置脚本检查每个日志文…

作者头像 李华
网站建设 2026/4/26 3:53:45

58、简单入侵检测技术:Snort的使用与配置

简单入侵检测技术:Snort的使用与配置 在网络安全领域,入侵检测是保障系统安全的重要手段。Snort作为一款知名的开源入侵检测系统(IDS),功能强大且灵活,下面将详细介绍Snort的使用、配置及相关要点。 Snort的模式与配置 Snort有多种模式,其中嗅探器模式可以使用 -d …

作者头像 李华