Javascript平方函数
我想写一个函数,检查给定的数字是否有特定的顺序 第二个数字必须是前一个数字的平方。 第一个数字只能是0-9 例如2439将返回'true',因为4是2的平方,9是3的平方 39416还将给出“true”,例如1624将返回“false”Javascript平方函数,javascript,recursion,Javascript,Recursion,我想写一个函数,检查给定的数字是否有特定的顺序 第二个数字必须是前一个数字的平方。 第一个数字只能是0-9 例如2439将返回'true',因为4是2的平方,9是3的平方 39416还将给出“true”,例如1624将返回“false” 我真的不知道怎么做。它应该是一个递归函数,但是一个没有递归的例子也很有用。我会尝试这样的方法: function isOrdered(input){ var position = 0; while(position<input.len
我真的不知道怎么做。它应该是一个递归函数,但是一个没有递归的例子也很有用。我会尝试这样的方法:
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
按顺序排列的函数(输入){
var位置=0;
而(position如注释部分所述,OP表示“firsts”限制为0..9。因此实现这一点的最简单方法是通过幂函数而不是平方根函数
更新:很抱歉,您要求输入JavaScript代码。请注意第一次调用
。如果手动将最后一个位置传递给函数,它将返回true
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
看看这个递归函数
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;
}
}
功能检测器(输入)
{
var input=input.toString()
var first=输入。substr(0,1);
var-power=Math.pow(parseInt(first),2);
var powerLength=power.toString().length;
if(parseInt(input.substr(1,powerLength))==power)
{
如果(input.length“firsts”数字将被限制在0到9的范围内?也就是说,平方数可以大于10,但要平方的数字总是小于10?很好的练习,ticky,如果“firsts”不象Marco所问的那样限制在0..9
。我喜欢那些家庭作业。你能解释一下39416是如何实现的吗?3是第三个9.4的平方根是16的平方根。第一个数字实际上被限制为9。这对于OP提供的39416
示例不起作用。这个示例给出了有序(“39982”)作为true@XGreen谢谢你的评论。我会努力找出哪里出了问题。@XGreen再次感谢你的注释。我犯了两个愚蠢的错误。一个在if条件中,另一个误用了string.substring:(。