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' ...
随机推荐
- 平滑arctan的值,将值映射为0~2π
欢迎访问我的个人博客:xie-kang.com 原文地址 在某些场景计算夹角时,会期望带上象限信息. 此时atan函数将不再满足我们的使用要求,因为atan返回值为 -π/2 ~ π/2,它没有携带有 ...
- Konga-Kong网关的权限控制指定消费者
刚开始陷入了误区了,网上很多参考例子都是如何实现身份证验证,而且看到konga上面配置身份插件的地方基本都有consumer一个配置项,一直纠结在这个如何通过key-auth实现指定的route或者s ...
- [极客大挑战 2019]Upload 1
进入可以看到,这时一道文件上传题目 直接上传test.php 提示Not image不是图片,可能是MIME绕过,尝试抓包修改Content-Type 提示Not php,猜测可能是检测后缀名不能是p ...
- ZIP64压缩扩展的兼容性问题
一.ZIP压缩的两种规范 zip64 格式是标准 zip 格式的扩展,实际上消除了 zip 存档中文件大小和数量的限制. 每种格式允许的最大值总结如下: Standard Format Zip64 F ...
- 网页静态化技术 Freemarker
网页静态化解决方案在实际运用中比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道.对于电商网站的商品详细页(几百万的商品,同样的页面模板格局)来说,每个商品又有大量的信息,这样的情况同样也适 ...
- HashMap和ConcurrentHashMap扩容过程
HashMap 存储结构 HashMap是数组+链表+红黑树(1.8)实现的. (1)Node[] table,即哈希桶数组.Node是内部类,实现了Map.Entry接口,本质是键值对. 下图链表中 ...
- Tomcat启动报错,Server Tomcat v8.0 Server at localhost failed to start
Eclipse 中Tomcat 启动报错Eclipse的提示窗口 Server Tomcat v8.0 Server at localhost failed to start .日志输出中报 F ...
- 使用Kali复现永恒之蓝
使用Kali复现永恒之蓝 本次实验为离线靶机测试 实验步骤 确认测试环境:在开始测试之前,需要确认测试环境是否符合要求.我使用的是一台运行Kali的测试机和一台运行Windows 7 64位的靶机.确 ...
- Django笔记十七之group by 分组用法总结
本文首发于微信公众号:Hunter后端 原文链接:Django笔记十七之group by 分组用法总结 这篇笔记介绍 Django 里面 model 的 group by 对应的一些操作. 用到的 M ...
- 无法加载 DLL“xxxx.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。
有一台服务器在执行接口的时候遇到了这样一个问题: 其他服务器上都没有这个问题,IIS部署好的项目目录的bin文件夹下是有这个dll的,但却提示无法加载,在网上找了好多帖子,终于发现了问题. 首先用De ...