首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对每个n累加charAt(*)

对每个n累加charAt(*)
EN

Code Review用户
提问于 2017-07-01 19:53:08
回答 2查看 51关注 0票数 1

这是一个助手函数,还有另外三个函数。它应该被称为.filter();,只返回素数。这是一个在FreeCodeCamp.com的演习,“和所有素数”。

我只是试图为每个n积累charAt(*),所以10返回1,1+0 21返回3,2+1返回,977返回23,是9+7+7。

在考虑charAt(0)之前,我已经注释掉了我的一些尝试,有些n将有多达3位数,如果我不需要限制它,可能会更多,但是我认为最大的测试用例是997,但是对于误差范围,还有一个额外的十进制。我终于有工作要做了,但我觉得我要走很长的路才能到那里..当然,在JavaScript中已经内置了一些东西,我忽略了这一点,以减少字符串的值。还是我应该试着把它转换成一个数字数组?

代码语言: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.

CodePen

EN

回答 2

Code Review用户

回答已采纳

发布于 2017-07-01 20:29:40

正如其他人所提到的,您正在尝试找到给定数字的数字和。在JavaScript中,您可以执行以下操作:

代码语言:javascript
复制
function digitalSum(number) {
  return (
    number
      .toString()
      .split('')
      .map(c => parseInt(c))
      .reduce((a, b) => a + b)
  )
}

正如它直观地显示的那样,上面的代码执行以下操作:

  1. 将数字转换为字符串
  2. 将字符串拆分为空字符串,因此字符串的每个数字/字符都是新列表的单个元素。
  3. 将每个数字从字符串转换为实际数字。
  4. 用和函数减少列表

完成这一任务还有其他方法,但我相信上述情况是相当容易理解的。

票数 5
EN

Code Review用户

发布于 2017-07-01 21:38:23

关注点分离

isItTHREED函数做了太多的事情。在设计函数时,强烈建议他们做一件事并做好它。

想想实现这一任务所需的重大步骤:

  • 从输入字符串中提取数字。
  • 数字之和
  • 检查和是否可被3除

在一个函数中,前两个步骤很好地生成数字之和,让我们将其称为sumOfDigits。在当前的环境中,分离到两个函数并不是最优的,因为它需要生成一个数组,这太过分了。

第三步可以使用sumOfDigits

计算数字

之和

目前的实现大致是这样做的:

  • 将输入转换为字符串
  • 逐个提取前4个字符并转换为数字。
  • 4位数之和

那是很多不必要的工作。解决方案仅限于输入最多4位数。虽然它适用于小于4位数的输入,但在n中引用可能不存在的索引时,它有点麻烦。

考虑这种没有不必要的类型转换的替代实现:

代码语言:javascript
复制
function sumOfDigits(n) {
  var work = n;
  var sum = 0;
  while (work > 0) {
    sum += work % 10;
    work = Math.floor(work / 10);
  }
  return sum;
}
票数 5
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/167124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档