试图对数字的每个数字进行平方,但我的算法不起作用?

时间:2015-06-02 12:53:49

标签: javascript math

我试图对数字的每个数字进行平方; 例如:

123应返回149

983 - > 81649等等

我在下面的Javascript代码中把它搞砸了,我正在寻找一些指导。

function splitNumber(num){
  var arr = [];
  while(num>0){
  var c = num%10;
  arr[arr.length]=c;
  num=num/10;}
  return arr;
}


function squareArrToNumber(arr){
  var c = 0;
  for(var i=arr.length-1;i>=0;i--){
  arr[i]=arr[i]^2;
  if(arr[i]^2>10)
  c = c*100+arr[i];
    else
  c = c*10+arr[i];
  }
  return c;
}

function squareDigits(num){
  squareArrToNumber(splitNumber(num));

}

6 个答案:

答案 0 :(得分:1)

试试这段代码

function numToSqr(num){
    var i, sqr=[],n;
    num = num.toString();
    for(i=0;i<num.length;i++){
        n = Number(num[i]);
    sqr.push(n*n);
    }
    return Number(sqr.join(""));
}

答案 1 :(得分:1)

您的代码存在多处问题,从过度复杂开始,将一串数字拆分为其合作字符只需使用.splt("")

var str = "123";
var arr = str.split("");
for(var i = 0;i<arr.length;i++)
  alert(arr[i]);

接下来,代码num ^ 2不会对数字进行平方。要做一个正方形,只需将数字乘以它自己(num * num

这给我们留下了一个相当简单的解决方案

function splitNumber(num){
  return num.split("");
}

function joinArray(arr){
   return arr.join("");  
}

function squareArrToNumber(arr){
  var newArr = [];
  for(var i=0;i<arr.length;i++){
      newArr.push(arr[i] * arr[i]);  
  }
  return joinArray(newArr);
}

function squareDigits(num){
  return squareArrToNumber(splitNumber(num));

}

alert(squareDigits("123"));
alert(squareDigits("983"));

答案 2 :(得分:0)

以下是我会做这样的事情:

var num = 123;
var numArray = num.toString().split("");
var result = "";
for(var i = 0; i < numArray.length; i++){
   result += parseInt(numArray[i]) * parseInt(numArray[i]);
}

答案 3 :(得分:0)

function squareNum(number) {
  var array = [];
  // Split number into an array of numbers that make it up
  array = String(number).split('');

  for (let i = 0; i < array.length; i++) {
    // Take each number in that array and square it (in place)
    // Also can be done with forEach depending on what es version you're targetting
    array[i] = Math.pow(array[i], 2);
  }

  // combine and return the elements of the array
  return Number(array.join(''));
}

squareNum(123);
squareNum(983);

答案 4 :(得分:0)

尝试此示例

function squareDigits(n) {
    return +(n.toString().split('').map(val => val * val).join(''));
}
console.log(squareDigits(4444));

此处 + 符号将字符串转换为整数。

答案 5 :(得分:-1)

if(arr[i]^2>10)

应该是

if(arr[i]>10)

而且,正如@Luaan所说,它应该是

arr[i] *= arr[i]