选择正整数但不选择分数

时间:2015-03-28 09:11:39

标签: javascript

我正在研究Codewars的基础知识,我试图将所有整数从1加到给定的数字n。

我必须验证n是一个有效的正整数。如果不是,我必须返回假。

例如 f(n = 100)//返回5050

到目前为止我的解决方案有效,但只有当n不是分数时才有效。如何阻止程序计算分数?

function f(n)
{
var total = 0, count = 1;
while (count <= n) {
  total += count;
  count += 1;
}


if (typeof n === 'number')
{
return total;
}
else{
return false;
}
};

而不是(typeof n ==='number'),我需要它只计算一个正整数(而不是接受一个分数,它仍然是一个'数字')。

你怎么能得到这个程序呢?

拜托,我正在研究基础知识,所以最简单的答案是最有帮助的。

4 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点。

检查舍入参数

的相等性
var isInt = function(i) { 
   return (typeof i === "number") && i === (~~ i) 
};

~~运算符将截断小数点后的所有内容。

检查剩余的数字除以

function isInt(i) {
   return (typeof i === "number") && i % 1 === 0;
}

如果数字是整数,那么在将它除以1后,它就不会让你休息。

将数字转换为字符串

var isInit = function(i) { 
   return (i + '').indexOf('.') === -1 
}

将空字符串添加到数字后,它将转换为字符串。

答案 1 :(得分:1)

mod乘以1时,分数将返回非零值。使用该值可将您的函数修改为:

function f(n){
    if(typeof n != "number" || n <0 || n%1 !=0){
        return false;
    }
    // rest of your code
    var total = 0, count = 1;
    while (count <= n) {
        total += count;
        count += 1;
    }
    return total;
}

答案 2 :(得分:1)

只需将数字比较为原始数字和整数:

function isPositiveInt(n) {return n >= 0 && n === (n|0)}

答案 3 :(得分:1)

以下是答案

  function f(n)
{
if(typeof n == "number" && Math.abs(n) ==n && Math.floor(n) == n)
return (1 + n)*(n/2);
else return 0;
}

enter image description here

获得1..N数字摘要的数学公式

http://en.wikipedia.org/wiki/1_%2B_2_%2B_3_%2B_4_%2B_%E2%8B%AF

毫不犹豫地问我任何问题

祝你好运!