【问题标题】:Simple Adding square of digits of a number简单添加数字的数字平方
【发布时间】:2016-04-07 10:03:27
【问题描述】:

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

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,我不明白。

【问题讨论】:

  • ^ 是按位异或运算符。您正在寻找Math.pow
  • 您认为^ 运算符的作用是什么?
  • @MinusFour 谢谢你,正如你在开始学习编程时看到的那样:S
  • 我认为这意味着权力......

标签: javascript exponentiation


【解决方案1】:

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

改变

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

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

【讨论】:

    【解决方案2】:

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

    您正在寻找Math.pow

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

    当然,也可以使用* 相乘:

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

    【讨论】:

    • 现在它告诉我南...我去看看
    • 在你的循环中,你有i&lt;=c.length所以,最后一个元素是NaN,只需使用&lt;而不是&lt;=
    • 太好了,刚刚自学编程,这个网站对我帮助很大,谢谢!
    • 你修好了,我知道长度有问题
    • 考虑使用 spilt、map 和 reduce - 它更短,可以避免一个错误。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      希望这会有所帮助:

      编辑

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

      【讨论】:

      • 你没有使用numNoStr
      • 没错。应该(但忘记)用“numNoStr”替换所有内部使用的“num”,以防万一输入是字符串,我的错
      【解决方案5】:

      你可以用数字来做到这一点:

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

      只是为了好玩,尝试使用正则表达式:

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

      【讨论】:

        猜你喜欢
        • 2022-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-16
        • 2011-01-03
        • 1970-01-01
        相关资源
        最近更新 更多