这个脚本的结果不是数字的平方和,第一个函数运行良好,我想问题出在第二个中
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));