Javascript快乐数字检测错误

Javascript快乐数字检测错误,javascript,Javascript,我的代码可以工作,但不能正确计数。例如,它将22和208视为,但它们不是。乘法结果也是错误的:在42之后,不是20,而是45 function isHappy(x){ var b = x, str = b.toString(), strlen = str.length, a = [], dejavue = [], sum = 0, isOne = false, result

我的代码可以工作,但不能正确计数。例如,它将22208视为,但它们不是。乘法结果也是错误的:在42之后,不是20,而是45

    function isHappy(x){
   var b = x,
       str = b.toString(), 
       strlen = str.length, 
       a = [], 
       dejavue = [], 
       sum = 0, 
       isOne = false, 
       result, 
       whilenumber = -1;

   while (isOne == false){
   whilenumber++;
   for (var i=0;i<strlen;i++){
       var ms = parseInt(str[i]);
       a[i] = ms*ms;
       //a[i] = Math.pow(ms, 2);   
   }
   if (a.length>1){
       for (var i=0;i<a.length;i++){
       sum = sum + a[i];  
       }   
   } else { sum = a[0];}
   var h = dejavue.indexOf(sum);
   if (h==-1) {dejavue[whilenumber] = sum;} else {
       result = " is not happy";
       break;   
   }
   if (sum!=1){
   b = sum;
   sum = 0;
   str = b.toString();
   strlen = str.length;
   }else{
   result = " is happy";
   isOne = true;
   }
}
   return dejavue+"_"+x+result;   
}
函数isHappy(x){
var b=x,
str=b.toString(),
strlen=str.length,
a=[],
dejavue=[],
总和=0,
isOne=false,
结果,,
whilenumber=-1;
while(isOne==false){
whilenumber++;
对于(var i=0;i1){
对于(var i=0;i
var l=50;
a=n=>{if((r=[…(n+'')).map(t=>t*t).reduce((a,b=>a+b))==1{alert('happy')}else{if(l){l--;a(r)}else{alert('happy')}
}
a(22)
/*解释*/
//我们希望函数运行ultil decise的次数是一个不愉快的数字。这是为了避免无限循环
var l=50;
//参数n=正整数
n=>{
如果(
//将整数转换为字符串,并将每个字符拆分为一个数组
(r=[…(n+“”)]
//将每个分隔的数字取其平方
.map(t=>t*t)
//平方和
.减少((a,b)=>a+b))
//如果结果等于一
== 1
){
//我们很高兴
警惕(“快乐”)
}否则{
//否则,我们将检查循环计数器(l)是否未完成循环
如果(l){
//如果是,那么我们从计数器中减去1,并用上述操作的结果调用相同的函数
l--;a(r)
}否则{
//否则,这是一个令人不快的数字
警惕(‘不高兴’)
}
}
}
var l=50;
a=n=>{if((r=[…(n+'')).map(t=>t*t).reduce((a,b=>a+b))==1{alert('happy')}else{if(l){l--;a(r)}else{alert('happy')}
}
a(22)
/*解释*/
//我们希望函数运行ultil decise的次数是一个不愉快的数字。这是为了避免无限循环
var l=50;
//参数n=正整数
n=>{
如果(
//将整数转换为字符串,并将每个字符拆分为一个数组
(r=[…(n+“”)]
//将每个分隔的数字取其平方
.map(t=>t*t)
//平方和
.减少((a,b)=>a+b))
//如果结果等于一
== 1
){
//我们很高兴
警惕(“快乐”)
}否则{
//否则,我们将检查循环计数器(l)是否未完成循环
如果(l){
//如果是,那么我们从计数器中减去1,并用上述操作的结果调用相同的函数
l--;a(r)
}否则{
//否则,这是一个令人不快的数字
警惕(‘不高兴’)
}
}

}
您可以通过使用较少的变量稍微更改代码,并通过
中断使用退出

基本上,你不需要迭代求平方,然后再进行另一个循环求平方和。使用数组
a
及其以前的值是产生错误结果的原因

函数isHappy(x){
var b=x,
str,
dejavue=[],
总和
结果;
while(true){
str=b.toString();
总和=0;
对于(变量i=0;i')+“:“+x+结果;
}
console.log(isHappy(22));

log(isHappy(7));
您可以通过使用较少的变量稍微更改代码,并通过
中断使用退出

基本上,你不需要迭代求平方,然后再进行另一个循环求平方和。使用数组
a
及其以前的值是产生错误结果的原因

函数isHappy(x){
var b=x,
str,
dejavue=[],
总和
结果;
while(true){
str=b.toString();
总和=0;
对于(变量i=0;i')+“:“+x+结果;
}
console.log(isHappy(22));

console.log(isHappy(7));
你的脚本应该做什么?它必须计算一个数字是否快乐我们已经收集到了。你能再详细一点吗?嘿,thanx,我也爱你们!艾米,找不到错误在哪里。对于前100个数字,(1-100)脚本正确地检测到所有快乐的数字,除了22(它不快乐)。你的脚本应该做什么?它必须计算一个数字是否快乐。我们已经收集了这个数字。你能再详细一点吗?嘿,thanx,我也爱你们!艾米,找不到错误在哪里。对于前100个数字,(1-100)脚本正确地检测所有快乐数字,除了22(它不快乐)。