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)
}

执行结果如下:


左神java代码

2022-04-12:给定一个字符串形式的数,比如“3421“或者“-8731“, 如果这个数不在-32768~32767范围上,那么返回“NODATA“, 如果这个数在-32768~32767范围上的更多相关文章

  1. 算法:Manacher,给定一个字符串str,返回str中最长回文子串的长度。

    [题目] 给定一个字符串str,返回str中最长回文子串的长度 [举例] str="123", 1 str="abc1234321ab" 7 [暴力破解] 从左 ...

  2. 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可以执行一个字符串形式 ...

  3. 给定一个字符串,仅由a,b,c 3种小写字母组成。

    package com.boco.study; /** * 题目详情 给定一个字符串,仅由a,b,c 3种小写字母组成. 当出现连续两个不同的字母时,你可以用另外一个字母替换它,如 有ab或ba连续出 ...

  4. 给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后。 要求:空间复杂度是O(1),且只能遍历一次字符串。

    题目:给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后. 要求:空间复杂度是O(1),且 ...

  5. 核心API的使用(给定一个字符串,统计每个字符出现的次数)

    /** * 给定一个字符串,统计每个字符出现的次数. 如:abdaewrwqask435a1aasd */public class ReplaceString { static int length; ...

  6. 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。

    给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &quo ...

  7. 【leetcode-03】给定一个字符串,请你找出其中不含有重复字符的最长子串的长度

    开个新坑,leetcode上面做题目.下面是题目描述: <!-- 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度. 示例 1: 输入: "abcabcbb" 输出 ...

  8. 给定一个字符串str,将str中连续两个字符为a的字符替换为b(一个或连续超过多个字符a则不替换)

    需求:给定一个字符串str,将str中连续两个字符为a的字符替换为b(一个或连续超过多个字符a则不替换) 如: a 不替换 b 不替换  ab 不替换 ba 不替换 aba 不替换  aab 替换为 ...

  9. 给定一个字符串,把字符串内的字母转换成该字母的下一个字母,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, 字符串内的其他字 ...

  10. 给定一个字符串,根据字符出现频率排序--Java实现

    题目描述: 给定一个字符串,请将字符串里的字符按照出现的频率降序排列. 示例 1: 输入:"tree" 输出:"eert" 解释:'e'出现两次,'r'和't' ...

随机推荐

  1. 在 Kubernetes 集群中部署现代应用的通用模式

    在 Kubernetes 集群中部署现代应用的通用模式 摘要 我们正在经历现代应用交付领域的第二次浪潮,而 Kubernetes 和容器化则是这次浪潮的主要推动力量. 随着第二次浪潮的推进,我们在 N ...

  2. MFC 错误调试总结

    1.  msdia80.dll can not be loaded 该文件的路径应该是:C:\Program Files\Common Files\microsoft shared\VC\msdia8 ...

  3. MySQL根据经纬度和距离查询最近的数据

    [lat]:输入的纬度 [lon]:输入的经度 [distance]:查询距离内的数据,单位m SELECT * FROM ( SELECT id lon, lat, vin, ROUND( 6378 ...

  4. Keepalived+HAProxy基于ACL实现单IP多域名负载功能

    编译安装 HAProxy 新版 LTS 版本,编译安装 Keepalived 开启HAProxy多线程,线程数与CPU核心数保持一致,并绑定CPU核心 因业务较多避免配置文件误操作,需要按每业务一个配 ...

  5. ansible用authorized_key模块批量推送密钥到受控主机实现免密登录

    一,ansible的authorized_key模块的用途 用来配置密钥实现免密登录: ansible所在的主控机生成密钥后,如何把公钥上传到受控端? 当然可以用ssh-copy-id命令逐台手动处理 ...

  6. git clone的时候出现 fatal: unable to access 'https://github.com/...':OpenSSL SSL_read: Connection was reset, errno 10054解决方法

    git clone的时候出现fatal: unable to access 'https://github.com/...':OpenSSL SSL_read: Connection was rese ...

  7. CSP2022-S游寄

    游寄游寄,顾名思义,边游边寄 11.00AM 起床 复习了一下各种终端命令,然后又复习了一下对拍 虽然都没用到 然后接着睡. 有点小紧张,毕竟一年没搞OI 12.00AM 今天吃河虾 还行,只是有点扎 ...

  8. Out Of Memory 案例

    案例一:老年代内存泄漏 某晚八点收到报警邮件,一看是OOM: ​ 打开 hickwall查看指标:JVM各项指标中 老年代在持续增长(从上次发布10月30号到11月10号的 12天 一直在增长,存在内 ...

  9. Spring AOP面向切面编程案例 (注解驱动开发)

    AOP(动态代理):指在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式:[1]导入 aop 模块:Spring AOP:(spring-aspects):[2]定义一个业务逻辑类 ...

  10. SpringBoot打包成exe(别再用exe4j了,使用JDK自带工具)

    SpringBoot打包成exe(别再用exe4j了,使用JDK自带工具) 搜到大部分打包exe的文章都是使用exe4j打包 步骤贼多,安装麻烦,打包麻烦 收费软件,公司使用会吃律师函 JDK14以上 ...