1. 评分: 0 分 2. 评分: 0 分 3. 评分: 0 分 编程题:请实现一个方法将一亿以内的数字变成汉语数字,比如:将51040转成“伍万壹 仟零肆拾”。 方法原型为:String convertInt2Chinese(int num)。 参考信息:零壹贰叁肆伍陆柒捌玖拾佰仟萬亿(30分)
function convertInt2Chinese(num) { var chineseNum = '零壹贰叁肆伍陆柒捌玖拾'; var strNum = String(num); var ret = ''; for (var a = strNum.length - 1; a >= 0; a -= 8) { //计算亿 var ret1 = ''; for (var a1 = 0; a1 < 8 && a - a1 >= 0; a1++) { var tmp1 = ['拾', '佰', '千', '万', '拾', '百', '千']; var tmp2 = a1 > 0 && strNum[a - a1] != '0' ? tmp1[a1 - 1] : ''; ret1 = chineseNum[parseInt(strNum[a - a1], 10)] + tmp2 + ret1; } while (ret1[0] == '零') ret1 = ret1.substr(1); while (ret1[ret1.length - 1] == '零') ret1 = ret1.substr(0, ret1.length - 1); if (a - 8 >= 0) ret1 = '亿' + ret1; ret = ret1 + ret; } return ret; } console.log(convertInt2Chinese(5104054230490));
2. 编程题:有两个长度分别为m,n的升序整型数组,其中n>m*m,求这两个数组的交集,要 求时间复杂度尽可能低。 如数组a: -10, 6, 7 数组b: -15, 1, 3, 4, 5, 6, 7, 8, 9, 10, 15 结果应该是: 6, 7(30分)
var arr1 = [-10, 6, 7]; var arr2 = [-15, 1, 3, 4, 5, 6, 7, 8, 9, 10, 15]; var arr3 = []; for (var a = 0; a < arr1.length; a++) { for (var b = 0; b < arr2.length; b++) { if (arr1[a] == arr2[b]) { arr3.push(arr1[a]); break; } } } console.log(JSON.stringify(arr3));
3. 编程题:有一个随机生成的数组,随机范围为(-1000,1000),从数组中截取一个或 连续的多个元素求和,求能截取到的和最大的元素序列,要求时间复杂度为 O(n)。 例如数组为 1, -4, 4, 10, -5, 7, 2, -5,其和最大的元素序列为 4, 10, -5, 7, 2。(40 分)
var arr1 = [1, -4, 4, 10, -5, 7, 2, -5]; // for (var a = 0; a < 10; a++) { // var rnd = parseInt(Math.random() * 2001) - 1001; // arr1.push(rnd); // } var ret = []; var retNum = -999999; var retAB = []; for (var a = 0; a < arr1.length - 1; a++) { var num1 = arr1[a] + arr1[a + 1]; if (num1 > retNum) { retNum = num1; retAB = [a, a + 1]; } for (var b = a + 2; b < arr1.length; b++) { num1 = num1 + arr1[b]; if (num1 > retNum) { retNum = num1; retAB = [a, b]; } } } for (var a = retAB[0]; a <= retAB[1]; a++) { ret.push(arr1[a]); } console.log(JSON.stringify(ret));