这个脚本的结果不是数字的数字的平方和,第一个函数工作正常,我想问题是在第二个
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,我没有得到它。
答案 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;
}