我的目标是创建一个程序,找到:
我试图完成前两个部分,如codepen链接所示:https://codepen.io/anon/pen/LdjveQ。 Javascript如下所示:
function result() {
var take = document.getElementById("number").value;
return eval(take.replace(/(\d)(?=\d)/g, '$1+'));
}
function answer() {
document.getElementById('resultfinal').innerHTML = result();
}
function result2() {
var sake = document.getElementById("integers").value;
var mult = (sake*(sake+1));
return eval(mult/2);
}
function answer2() {
document.getElementById('sumofn').innerHTML = result2();
}
我不知道:
答案 0 :(得分:1)
如果是蛮力"方法是可行的,我首先将P(n)
定义为函数(下面的se p
函数)并使用for
求和:
function p(inputN) {
var n = inputN, m = 1, digit;
while (n) {
digit = n % 10;
if (digit) m *= digit;
n = Math.floor(n / 10);
}
return m;
}
function result3() {
var sum = 0, i, n = document.getElementById("tpn-input").value;
for(var i = 1; i <= n; i++) {
sum += p(i);
}
return sum;
}
function answer3() {
document.getElementById('tpn').innerHTML = result3();
}
&#13;
<input type="text" id="tpn-input"><button onClick="answer3()">P(n)</button>
<p id = "tpn"></p>
&#13;
使用字符串.split()
,.filter()
以及.reduce()
还有其他一些更具可读性的方法,但上述内容肯定会更具性能。
而且,仅仅是为了它,它是一个过度简短的实现:
function p(n) {
return n.toString().split('').map(Number).filter(i => i).reduce((a, b) => a * b, 1);
}
function tp(n) {
return [...Array(+n).keys()].map(i => p(i+1)).reduce((a, b) => a + b, 0);
}
function answer3() {
document.getElementById('tpn').innerHTML =
tp(document.getElementById("tpn-input").value);
}
&#13;
<input type="text" id="tpn-input"><button onClick="answer3()">P(n)</button>
<p id = "tpn"></p>
&#13;
答案 1 :(得分:0)
您应该首先尝试使用某些数组方法迭代从1
到n
的数组。 reduce
最适合这种情况:它接收一个数组并从数组中每个元素的一个操作(或几个)返回一些累积值。例如:
function sumUpToN(n) {
return Array.from({ length: n + 1}, (_, i) => i)
.reduce((partialSum, thisNum) => partialSum + thisNum);
}
console.log(sumUpToN(5));
使用Array.from生成数组,然后用.reduce
迭代它们。第一个参数是前一次迭代.reduce
的返回值,第二个参数是数组中的当前元素。当你需要迭代整个数组并在另一端出现一个值时尝试使用类似的方法 - 除了普通加法(它将产生数组中所有元素的总和),使用任何运算符( s)适用于有问题的问题。