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' ...
随机推荐
- SAP transformation特殊字符
unicode 0000 在transformation中总被翻译成,这个转义在其他语法中不存在,所以总是报错.
- linux 常用的查找命令
linux 常用的查找命令 查找文件内容 grep grep -nr "str" path -nr: n是line number行号,r是recursive,可以理解为遍历文件文件 ...
- 初识Node和内置模块
初识Node与内置模块 概述:了解Node.js,熟悉内置模块:fs模块.path模块.http模块 初识Node.js 浏览器中的JavaScript运行环境 运行环境是指代码正常运行所需的必要环境 ...
- 【CS231n assignment 2022】 vscode 环境配置
文章目录 前言 一.安装 Python 二.安装 vscode 三. cs231n 作业下载 四.配置 vscode 五.虚拟环境包安装 六.数据集 前言 今年成功考上了本校的研究生,要开始进入研究生 ...
- CAS 单点登录系统
一.什么是单点登录 单点登录(Sign Sion On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系 ...
- Centos7端口开放及查看
1.开放端口 firewall-cmd --zone=public --add-port=端口/tcp --permanent eg:firewall-cmd --zone=public --add- ...
- 如何用Python对股票数据进行LSTM神经网络和XGboost机器学习预测分析(附源码和详细步骤),学会的小伙伴们说不定就成为炒股专家一夜暴富了
前言 最近调研了一下我做的项目受欢迎程度,大数据分析方向竟然排第一,尤其是这两年受疫情影响,大家都非常担心自家公司裁员或倒闭,都想着有没有其他副业搞搞或者炒炒股.投资点理财产品,未雨绸缪,所以不少小伙 ...
- JAVA异步编程之Callbacks与Futures模型
JAVA异步编程之Callbacks与Futures模型 一:Callbacks模型 该模型的异步方法,在异步任务完成之后调用,主线程没有异步线程的结果.经典模型如Swing's EventLis ...
- VUE2.x原理之Object.defineProperty()
Object.defineProperty()语法说明 Object.defineProperty()的作用就是直接在一个对象上定义一个新属性,或者修改一个已经存在的属性 Object.defineP ...
- 非线性规划—R实现
非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法.运筹学八大分支之一,20世纪50年代初,库哈(H.W.Kuhn) 和托克 (A.W.Tucker) 提出了 ...