【leetcode】405.数字转换为十六进制数js

碎碎念

前天熬的夜今天也是全还回来了好晕啊。。图书馆这两天空调开得也很大,平常都不带外套的今天都裹上了。

题目

十进制转n进制通用模板

javascript 复制代码
/**
 * @param {number} num
 * @param {number} base
 * @return {string}
 */
var convertToBaseN = function(num, base) {
  if (num === 0) return '0'
  const digits = '0123456789ABCDEF'
  let res = ''
  while (num > 0) {
    res = digits[num % base] + res
    num = Math.floor(num / base)
  }
  return res
};

本题思路

正数部分没什么好说的套模板就行了。

负数说要用补码,这就需要了解一下补码是怎么计算的了。手算的话可以看看下面两个方法:

  1. 符号位保持不变,将尾数按位取反后加1。
  1. 符号位保持不变,尾数自低位向高位,第一个1及其以前的各位0保持不变,其他位按位取反。

上面也算小复习了哈哈哈,但如果是在代码里呢?可以看下补码和真值的映射:

可以看到负数的真值加上2^{n}就可以。而这题数的范围是-2^{-31}~2^{31}-1,因此我们加上2^{32}之后按照正数的继续算就行。

代码

javascript 复制代码
/**
 * @param {number} num
 * @return {string}
 */
var toHex = function(num) {
    if (num === 0) return '0'
    const digit = '0123456789abcdef'
    let ans = ''
    if (num < 0) num += Math.pow(2, 32)
    while (num > 0) {
        ans = digit[num % 16] + ans
        num = Math.floor(num / 16)
    }
    return ans
};
相关推荐
言乐62 小时前
Python游戏水平测试辅助系统
开发语言·python·游戏·django·pygame
我命由我123458 小时前
CesiumJS 笔记 - 获取容器中心点、Cartesian3 clone 方法、修改 Cartesian3 对象的高度
前端·javascript·css·前端框架·html·html5·js
抱抱宝9 小时前
Agent-study项目教程(03):手写 Mini-ReAct Agent(不依赖框架)
javascript·人工智能·gpt·react.js·prompt·agent
用户938515635079 小时前
Next.js 笔记系统(二):Redis 数据服务与侧边栏组件拆分实战
javascript·全栈
WWJA王文举9 小时前
I²C通信完整流程详解:START、地址、ACK、数据、Repeated START和STOP一次讲透
c语言·开发语言
zhanghaha131410 小时前
Python进阶教程:6_JSON 数据解析 —— 新手完全指南
开发语言·python·json
qq_4480111611 小时前
C语言中的动态内存分配
c语言·开发语言·php
汉字萌萌哒12 小时前
2024CSP-J入门级C++真题详解
开发语言·c++
arbboter12 小时前
【网络工具】NetProxy网络代理用户手册
开发语言·网络·c#·网络代理·网络异常·代理工具
Heo13 小时前
大厂前端调试不能只会debugger
前端·javascript·面试