首页 > 试题广场 >

最大数

[编程题]最大数
  • 热度指数:6035 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个包含大写英文字母和数字的句子,找出这个句子所包含的最大的十六进制整数,返回这个整数的值。数据保证该整数在int表示范围内

示例1

输入

"012345BZ16"

输出

1193051

说明

12345B对应十进制为1193051

备注:
0<字符串长度<=105
function solve(s) {

    //16进制的正则
    let reg = /[0-9a-fA-F]+/g;
    let res = s.match(reg);//返回匹配的字符串数组
   

    //求10进制的最大值
    let max = 0;
    res.forEach(e => {
        // let temp = sum(e); 这是我自定义的求16进制整数
        let temp = parseInt(e16);
        if (max < temp) {
            max = temp;
        }
    });
    return max;
}
发表于 2020-08-24 13:43:51 回复(0)
    function solve(s) {
// write code here
var reg = new RegExp("[G-Z]+","g");
var arr = s.split(reg);
var max = 0;
for (let i of arr) {
if (parseInt(i, 16) > max) {
max = parseInt(i, 16);
}
}
return max;
}
编辑于 2020-04-21 14:42:24 回复(0)
正则匹配0-9A-F的字符串,然后按长度降序排序,把最长的几个16进制字符串(降序后在数组开始位置)转10进制后选最大的。
function hex2int(hex){
 var len=hex.length,a=new Array(len),code;
    for (var i=0;i<len;i++){
        code = hex.charCodeAt(i);
        if (48<=code&&code<58){code-=48;}
                else{code=(code&0xdf)-65+10;}
        a[i]=code;
    }
    return a.reduce(function(acc,c) {acc=16*acc+c;return acc;},0);
 }
 function solve(s)
 {
	let array = s.match(/[1-9A-F][\dA-F]*/g);
	if (array==null){return 0;}
	array.sort((a,b)=>{return a.length-b.length}).reverse();
	let strLen = array[0].length;
	let arrLen = array.length;
	let hexArray = [];
	for(let i=0;i<arrLen;i++)
	 {
		if(array[i].length<strLen)break;
		hexArray.push(hex2int(array[i]));
	 }
	hexArray.sort().reverse();
	return hexArray[0];
 }

发表于 2020-03-28 23:00:02 回复(0)

问题信息

难度:
3条回答 6727浏览

热门推荐

通过挑战的用户

查看代码