简单添加数字的正方形

时间:2016-01-03 18:44:13

标签: javascript exponentiation

这个脚本的结果不是数字的数字的平方和,第一个函数工作正常,我想问题是在第二个

function nToArray(a) {
  var res=[];
  var s =a.toString();
  for(i=0;i<s.length;i++){
    res[i]=s.charAt(i);}
  return res;
}

 //var a ="hola";
 //document.write(a.length);
alert(nToArray(562));
function addSq(b){
  var c=nToArray(b);
  var z=0;
  var i;
  for (i=0;i<=c.length;i++){//here 
    z+=((parseInt(c[i]))^2);}
  return z;
}

alert(addSq(81));

对于81我得到15,我没有得到它。

5 个答案:

答案 0 :(得分:2)

JavaScript没有取幂运算符,^是按位整数XOR。

您正在寻找Math.pow

z += Math.pow(parseInt(c[i]), 2);

或者当然,只需使用*来乘以:

var value = parseInt(c[i]);
z += value * value;

答案 1 :(得分:2)

这是一个简短的版本 - 抱歉遗漏的格式:

var a=81;
console.log(a.toString().split('').map(function(i) {return Math.pow(i, 2)}).reduce(function(a, b) {return a + b}));

答案 2 :(得分:1)

虽然^表示某些语言中的指数,但JavaScript中并非如此。

更改

z+=((parseInt(c[i]))^2);

var tmp = parseInt(c[i]);
z+= tmp * tmp;

答案 3 :(得分:1)

希望这会有所帮助:

修改

function addSq(num){
var numNoStr = parseInt(num, 10);
var z = 0;
while (numNoStr > 0) {
    var digit = numNoStr % 10;
    z += Math.pow(digit, 2);
    numNoStr = parseInt(numNoStr / 10 , 10);
}
return z;
}
alert(addSq(81));

答案 4 :(得分:1)

你可以用数字做这个:

function sum_of_squares_of_digits(n) {
  var s = 0;
  while (n) {
    var digit = n % 10;
    s += digit * digit;
    n = (n - digit) / 10;
  }
  return s;
}

只是为了好玩,尝试使用regexp:

function sum_of_squares_of_digits(n) {
  var s = 0;
  n.toString().replace(/\d/g, d => s += d * d);
  return s;
}