我想用javascript编写一个函数来计算给定正数的3个连续数的最大总和。
因此,例如124999012将计算27。
我已经编写了一个计算数字位数之和的函数:
function sumDigits(n)
{
var str = n.toString();
var result = 0;
for(var i = 0; i < str.length; i++)
{
result = result + parseInt(str.charAt(i));
}
return result;
}
答案 0 :(得分:1)
function sumDigits(n) {
return Math.max.apply(null, Array.prototype.map.call("" + n, function (s, ix) {
return [+s, +n.toString()[ix + 1], +n.toString()[ix + 2]]
.reduce(function (prev, curr) { return prev + (curr || 0) });
}));
}
当然,the fiddle。
一步一步:
1)将数组转换为三个元素的数组,即当前元素和接下来的2个元素:
Array.prototype.map.call(n.toString(), function (s, ix) {
return [+s, +n.toString()[ix + 1], +n.toString()[ix + 2]];
});
2)获取数组中每个项目的三个元素的总和:
item.reduce(function (prev, curr) { return prev + (curr || 0) });
对于数组的最后一个元素, curr
将是未定义的,因此它可能会转换为0
。
3)获取最后一个数组的max
:
Math.max.apply(null, array);
多数民众赞成!
答案 1 :(得分:0)
您会想要使用Array.splice
和Math.max
function highestNum(n){
var arr = [], nArr = (n+"").split("");
while(nArr.length > 0)
arr.push(nArr.splice(0,3).reduce(function(t, c){ return +t + +c }, 0));
return Math.max.apply(null, arr);
}
它正在做的是,首先它将数字转换为字符串,然后使用Array.splice
,将数组拆分为3个元素的片段,然后使用Array.reduce
得到这三个元素的总和你推入另一个数组的数字。然后,您使用Math.max
和Function.apply
获取使用return
运算符返回的最高值。
答案 2 :(得分:0)
function sumDigits(n)
{
var str = n.toString();
var result = 0;
var temp=0;
//for safety check length of the string
// if it is not longer than 3 characters then just sum them up and return
if (str.length<=3)
{
for(var i = 0; i < Math.Min(3,str.length); i++)
result += parseInt(str.charAt(i));
}
else
{
//now look for biggest 3 consecutive numbers,
//you wanna sum up 3 digits starting at index 0, and compare it with the max value you have calculated so far
for(var i = 0; i < str.length-3; i++)
{
//calculate the sum of 3 consecutive numbers starting at index i
temp = parseInt(str.charAt(i)) + parseInt(str.charAt(i+1)) + parseInt(str.charAt(i+2));
//compare it to the current max, if it is greater than the current max, set it as the result
if (temp>result)
result = temp;
}
}
return result;
}
答案 3 :(得分:0)
你可以这样做:
function sumDigits(number)
{
var numberString = "" + number;
var max = -1;
for(var i = 0; i < numberString.length - 3; i++)
{
var number1 = parseInt(numberString.charAt(i));
var number2 = parseInt(numberString.charAt(i + 1));
var number3 = parseInt(numberString.charAt(i + 2));
var tempTotal = number1 + number2 + number3;
if(tempTotal > max)
{
max = tempTotal;
}
}
window.alert("" + max);
return max;
}
您可以从前三位开始循环,直到您测试了3个连续数字的每个组合。只需将3个数字加在一起,如果它大于当前最大值,则将当前最大值设置为临时值。
答案 4 :(得分:0)
这可能是正则表达式运行良好的情况。我不是RegExp专家,有人可能会指出这样做吗?
的Javascript
var num = 12224999011112,
matches = num.toString().match(/(.)\1{2}/g),
sum = 0;
if (matches) {
sum = Math.max.apply(null, matches).toString().charAt() * 3;
}
document.body.appendChild(document.createTextNode(sum));
&#13;
首先,将数字转换为字符串,以便您可以使用RegExp。然后,我们匹配所有出现3个并发字符的事件。如果我们有任何匹配,那么我们选择数学上最大的。我们将其转换为字符串,取第一个字符并乘以3。