首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript square函数

Javascript square函数
EN

Stack Overflow用户
提问于 2015-01-09 00:41:11
回答 3查看 1K关注 0票数 2

第二个数字必须是前一个数字的平方。第一个数字只能是0- 9。

例如,2439将返回'true‘,因为4是2的平方,9是3的平方。

我真的不知道该怎么做。它应该是一个递归函数,但如何在没有递归的情况下实现它的示例也会很有帮助。

EN

回答 3

Stack Overflow用户

发布于 2015-01-09 00:45:09

我会尝试这样的东西:

代码语言:javascript
复制
function isOrdered(input){ 

    var position = 0;

    while(position<input.length-2)
    {

        var currentFirstNumber = parseInt(input[position]);

        if(currentFirstNumber<=2) {
            if (Math.sqrt(parseInt(input[position + 1])) !== currentFirstNumber)
                return false;
            else
                position+=2;
        }

       if(currentFirstNumber>=4 && currentFirstNumber<=9)
       {
           var squared = input.substring(position+1,position+3);

           if(Math.sqrt(parseInt(squared))!==currentFirstNumber)
               return false;
           else
               position=position+3;
        }
    }

    return true;
}

console.log(isOrdered("2439"));    // outputs true
console.log(isOrdered("39416"));   // outputs true
console.log(isOrdered("1624"));    // outputs false

我将数字作为字符串传递给函数。

票数 1
EN

Stack Overflow用户

发布于 2015-01-09 01:16:25

正如评论部分所提到的,OP说“第一次”被限制在0..9。因此,完成此操作的最简单方法是使用power函数,而不是square root函数。

更新:抱歉,您要的是JavaScript代码。小心使用FIRST CALL。如果您手动将最后一个位置传递给函数,它将返回true。

代码语言:javascript
复制
function verification(number, position){        
    var str = String(number);                        // Cast number to String
    if(str.length > position){                       // Verify valid position
        var value = str.substr(position, 1);         // take the 'first' value
        var pow = Math.pow(value, 2);                // Calculate the power
        // Verify if the next value is equivalent to the power
        if(str.indexOf(pow, position) == position + 1){   
            // Recursive call to verify the next position
            return verification(number, position + String(pow).length + 1);
        } else {
            // If not equivalent, you found an inconsistency. 
            return false;
        }
    // If you ran it until you reached the last position, you're good to go.
    }else if(str.length == position){
        return true;
    }
}

console.log(verification(39416, 0)); // True
console.log(verification(39415, 0)); // True
console.log(verification(981524, 0)); // false
console.log(verification(981525, 0)); // true
console.log(verification(98525, 0)); // false
票数 0
EN

Stack Overflow用户

发布于 2015-01-09 01:19:04

看一下这个递归函数

代码语言:javascript
复制
function detectOrder(input)
{
    var input = input.toString()
    var first = input.substr(0,1);
    var power = Math.pow(parseInt(first), 2);
    var powerLength = power.toString().length;
    if ( parseInt(input.substr(1, powerLength)) == power )
    {
        if (input.length <= 1+powerLength)
        {
            return true;
        }
        else
        {
            return detectOrder(input.substr(1+powerLength));
        }
    }
    else
    {
        return false;
    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27845178

复制
相关文章

相似问题

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