2022-04-12:给定一个字符串形式的数,比如“3421“或者“-8731“, 如果这个数不在-32768~32767范围上,那么返回“NODATA“, 如果这个数在-32768~32767范围上
2022-04-12:给定一个字符串形式的数,比如"3421"或者"-8731",
如果这个数不在-32768~32767范围上,那么返回"NODATA",
如果这个数在-32768~32767范围上,
那么这个数就没有超过16个二进制位所能表达的范围。
返回这个数的2进制形式的字符串和16进制形式的字符串,用逗号分割。
来自兴业数金。
答案2022-04-12:
自然智慧即可。
代码用golang编写。代码如下:
package main
import (
"fmt"
"strconv"
)
func main() {
num := "10"
ret := convert(num)
fmt.Println(ret)
}
// 请保证输入的num字符串一定是数字的形式
func convert(num string) string {
// 因为-32768~32767所有的数,最多6个字符,所以超过就返回"NODATA"
if len(num) == 0 || len(num) > 6 {
return "NODATA"
}
// 既然长度不超过6,那么转成整数一定不会有问题
// 当然你也可以自己写这个转化过程,这个是比较简单的
//int n = Integer.valueOf(num);
n, _ := strconv.Atoi(num)
// 如果转换完成后超过了范围,那么返回"NODATA"
if n < -32768 || n > 32767 {
return "NODATA"
}
// 接下来n就是一个在范围上的数字
// 我们要取出16位信息(info),这包括:
// 提取出n的14位~0位的信息 : 也就是(n & 65535)
// 提取出第15位符号位信息 : 如果n<0,第15位就是1,如果n>=0第15位就是0
// 然后把(15位)和(14位~0位),或在一起
// 比如5323,32位二进制形式如下:
// 00000000000000000001010011001011
// 14位~0位是:
// _________________001010011001011
// 15位符号位应该是0:
// ________________0_______________
// 所以info应该是:
// ________________0001010011001011
//
// 再比如-6725,32位二进制形式如下:
// 11111111111111111110010110111011
// 14位~0位是:
// _________________110010110111011
// 15位符号位应该是1:
// ________________1_______________
// 所以info应该是:
// ________________1110010110111011
//int info = (n < 0 ? (1 << 15) : 0) | (n & 65535);
info := 0
if n < 0 {
info = 1 << 15
}
info = info | (n & 65535)
// 此时info的15位~0位,就是我们要的;info的更高位完全没用
builder := make([]byte, 0)
// 依次提取二进制信息很简单
for i := 15; i >= 0; i-- {
if (info & (1 << i)) != 0 {
builder = append(builder, '1')
} else {
builder = append(builder, '0')
}
}
builder = append(builder, []byte(",0x")...)
// 依次提取16进制的时候,每4位提取
// 依次提取4位信息的时候
// 0000 -> 0 -> '0'
// 0001 -> 1 -> '1'
// ...
// 1001 -> 9 -> '9'
// 1010 -> 10 -> 'a'
// 1011 -> 11 -> 'b'
// 1100 -> 12 -> 'c'
// 1101 -> 13 -> 'd'
// 1110 -> 14 -> 'e'
// 1111 -> 15 -> 'f'
for i := 12; i >= 0; i -= 4 {
// 1111 << 12
// ( info & (1111 << 12) ) >> 12
// ( info & (1111 << 8)) >> 8
// ( info & (1111 << 4)) >> 4
// ( info & (1111 << 0)) >> 0
cur := (info & (15 << i)) >> i
if cur < 10 {
builder = append(builder, []byte(fmt.Sprint(cur))...)
} else {
switch cur {
case 10:
builder = append(builder, 'a')
break
case 11:
builder = append(builder, 'b')
break
case 12:
builder = append(builder, 'c')
break
case 13:
builder = append(builder, 'd')
break
case 14:
builder = append(builder, 'e')
break
default:
builder = append(builder, 'f')
}
}
}
return string(builder)
}
执行结果如下:

2022-04-12:给定一个字符串形式的数,比如“3421“或者“-8731“, 如果这个数不在-32768~32767范围上,那么返回“NODATA“, 如果这个数在-32768~32767范围上的更多相关文章
- 算法:Manacher,给定一个字符串str,返回str中最长回文子串的长度。
[题目] 给定一个字符串str,返回str中最长回文子串的长度 [举例] str="123", 1 str="abc1234321ab" 7 [暴力破解] 从左 ...
- divmod(a,b)函数是实现a除以b,然后返回商与余数的元组、eval可以执行一个字符串形式的表达式、exec语句用来执行储存在字符串或文件中的Python语句
#!/usr/bin/env python a = 10/3 print(a) #divmod计算商与余数 r = divmod(10001,20) print(r) #eval可以执行一个字符串形式 ...
- 给定一个字符串,仅由a,b,c 3种小写字母组成。
package com.boco.study; /** * 题目详情 给定一个字符串,仅由a,b,c 3种小写字母组成. 当出现连续两个不同的字母时,你可以用另外一个字母替换它,如 有ab或ba连续出 ...
- 给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后。 要求:空间复杂度是O(1),且只能遍历一次字符串。
题目:给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后. 要求:空间复杂度是O(1),且 ...
- 核心API的使用(给定一个字符串,统计每个字符出现的次数)
/** * 给定一个字符串,统计每个字符出现的次数. 如:abdaewrwqask435a1aasd */public class ReplaceString { static int length; ...
- 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。
给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &quo ...
- 【leetcode-03】给定一个字符串,请你找出其中不含有重复字符的最长子串的长度
开个新坑,leetcode上面做题目.下面是题目描述: <!-- 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度. 示例 1: 输入: "abcabcbb" 输出 ...
- 给定一个字符串str,将str中连续两个字符为a的字符替换为b(一个或连续超过多个字符a则不替换)
需求:给定一个字符串str,将str中连续两个字符为a的字符替换为b(一个或连续超过多个字符a则不替换) 如: a 不替换 b 不替换 ab 不替换 ba 不替换 aba 不替换 aab 替换为 ...
- 给定一个字符串,把字符串内的字母转换成该字母的下一个字母,a换成b,z换成a,Z换成A,如aBf转换成bCg, 字符串内的其他字符不改变,给定函数,编写函数 void Stringchang(const char*input,char*output)其中input是输入字符串,output是输出字符串
import java.util.Scanner; /*** * 1. 给定一个字符串,把字符串内的字母转换成该字母的下一个字母,a换成b,z换成a,Z换成A,如aBf转换成bCg, 字符串内的其他字 ...
- 给定一个字符串,根据字符出现频率排序--Java实现
题目描述: 给定一个字符串,请将字符串里的字符按照出现的频率降序排列. 示例 1: 输入:"tree" 输出:"eert" 解释:'e'出现两次,'r'和't' ...
随机推荐
- superset连接mysql数据
目前superset的官网没给出windows的安装教程,但是实际操作是可以的,网上有很多教程,再次就不赘述! 本篇随笔是介绍superset如何连接mysql数据源,本人踩坑踩了一整天.=_= ~~ ...
- docker 部署 postgres
1. 打开dockerhub查找postgres版本 地址 https://registry.hub.docker.com/_/postgres/tags 2.复制需要的版本 docker pull ...
- 声网自研传输层协议 AUT 的落地实践丨Dev for Dev 专栏
本文为「Dev for Dev 专栏」系列内容,作者为声网大后端传输协议负责人 夏天. 针对实时互动应用对网络传输带来的新需求和新挑战,声网通过将实时互动中的应用层业务需求与传输策略的分层和解耦,于 ...
- Flutter 2 渲染原理和如何实现视频渲染
7 月 17 日下午,在前端专场巡回沙龙北京站中,声网Agora跨平台开发工程师卢旭辉带来了<Flutter2 渲染原理和如何实现视频渲染>的主题分享,本文是对演讲内容的整理. 本次分享主 ...
- 解放AI生产力——ComfyUI
最近状态不好,所以这几天基本没干什么,就分享一下和AI绘画工作流有关的东西吧. 此前我都没有抱着一种教学的心态来写博客,因为我所掌握的东西实在太过简单,只要一说大家就会了,我害怕我在人群里失去自己的特 ...
- java多线程--5 同步方法和同步块synchronized
java多线程--5 同步方法和同步块synchronized 同步方法和同步块 同步方法:关键字synchronized,包括synchronized方法和synchronized块 public ...
- 【责任链设计模式详解】C/Java/JS/Go/Python/TS不同语言实现
简介 责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,也叫职责链模式.命令链模式.这种模式为请求创建了一个接收者对象的链,允许你将请求沿着处理者链进行 ...
- 传输层和网络层的checksum区别,TCP cksum为何包含伪首部
一直搞不清传输层和网络层的校验和为什么校验内容不一样,最近问了一些前辈,找寻了一些答案,总结一下自己的思考. 先说一下传输层(TCP)和网络层(IP)的校验和: TCP校验和有伪首部.TCP herd ...
- mongodb导入数据,保创建新项目
1.回顾 2.导入数据 2.1 excel数据表格 2.2 设计导入数据的路由 routes/users.js router.get('/upload', function (req, res, ne ...
- SwitchHosts operation not permitted 解决方案--亲测有效
SwitchHost!是帮助我们管理Hosts的工具,可以帮助我们做域名解析, 弥补了如果要修改域名还要改计算机C:\Windows\System32\drivers\etc位置下的hosts文件的弊 ...