我正在研究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'),我需要它只计算一个正整数(而不是接受一个分数,它仍然是一个'数字')。
你怎么能得到这个程序呢?
拜托,我正在研究基础知识,所以最简单的答案是最有帮助的。
答案 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;
}
获得1..N数字摘要的数学公式
http://en.wikipedia.org/wiki/1_%2B_2_%2B_3_%2B_4_%2B_%E2%8B%AF
毫不犹豫地问我任何问题
祝你好运!