这是一个助手函数,还有另外三个函数。它应该被称为.filter();,只返回素数。这是一个在FreeCodeCamp.com的演习,“和所有素数”。
我只是试图为每个n积累charAt(*),所以10返回1,1+0 21返回3,2+1返回,977返回23,是9+7+7。
在考虑charAt(0)之前,我已经注释掉了我的一些尝试,有些n将有多达3位数,如果我不需要限制它,可能会更多,但是我认为最大的测试用例是997,但是对于误差范围,还有一个额外的十进制。我终于有工作要做了,但我觉得我要走很长的路才能到那里..当然,在JavaScript中已经内置了一些东西,我忽略了这一点,以减少字符串的值。还是我应该试着把它转换成一个数字数组?
function isItTHREED(n) {
// https://www.thoughtco.com/how-to-determine-number-is-prime-2312518
// Try 3. Take the number, and add the digits up, when those digits are divisible by 3, the number is not prime.
// Take 2469, those digits add up to 21, and 21 is divisible by 3, therefore 2469 is not a prime number.
console.log('3s',n);
n = n.toString();
var digitONE = Number(n.charAt(0));
var digitTWO = Number(n.charAt(1));
var digitTHREE = Number(n.charAt(2));
var digitFOUR = Number(n.charAt(3));
console.log('digits',digitONE);
console.log('digits',digitTWO);
console.log('digits',digitTHREE);
console.log('digits',digitFOUR);
var testing = digitONE + digitTWO +digitTHREE + digitFOUR
console.log(testing);
//if(testing % 3 != 0)
/*
n = n.toString();
n = n.split('');
//num = num.split('');
n = [n];
console.log("num", n);
*/
n = testing;
return n;
} //end of isItTHREED
isItTHREED(10); // should return 1
isItTHREED(21); // should return 3
isItTHREED(977); // should return 23.发布于 2017-07-01 20:29:40
正如其他人所提到的,您正在尝试找到给定数字的数字和。在JavaScript中,您可以执行以下操作:
function digitalSum(number) {
return (
number
.toString()
.split('')
.map(c => parseInt(c))
.reduce((a, b) => a + b)
)
}正如它直观地显示的那样,上面的代码执行以下操作:
完成这一任务还有其他方法,但我相信上述情况是相当容易理解的。
发布于 2017-07-01 21:38:23
isItTHREED函数做了太多的事情。在设计函数时,强烈建议他们做一件事并做好它。
想想实现这一任务所需的重大步骤:
在一个函数中,前两个步骤很好地生成数字之和,让我们将其称为sumOfDigits。在当前的环境中,分离到两个函数并不是最优的,因为它需要生成一个数组,这太过分了。
第三步可以使用sumOfDigits。
之和
目前的实现大致是这样做的:
那是很多不必要的工作。解决方案仅限于输入最多4位数。虽然它适用于小于4位数的输入,但在n中引用可能不存在的索引时,它有点麻烦。
考虑这种没有不必要的类型转换的替代实现:
function sumOfDigits(n) {
var work = n;
var sum = 0;
while (work > 0) {
sum += work % 10;
work = Math.floor(work / 10);
}
return sum;
}https://codereview.stackexchange.com/questions/167124
复制相似问题