简单添加数字的位数平方

Simple Adding square of digits of a number

本文关键字:添加 数字 简单      更新时间:2023-09-26

这个脚本的结果不是数字的平方和,第一个函数运行良好,我想问题出在第二个中

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,我没有得到。

JavaScript没有幂运算符,^是一个逐位整数XOR。

您正在查找Math.pow

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

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

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

这里有一个简短的版本-很抱歉缺少格式:

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

虽然^在某些语言中表示指数,但在JavaScript中却不是这样。

更改

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

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

你可以用数字来完成:

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;
}

希望这有帮助:

编辑

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));