一个while循环将多位数的数字加在一起? (JavaScript)的

时间:2015-07-23 10:17:48

标签: javascript function while-loop numbers digits

我需要将数字的数字加在一起(例如21是2 + 1),以便将数字减少到只有一位数(3)。我想出了如何做到这一点。

然而,

1)我可能需要在同一个变量上多次调用该函数(例如99是9 + 9 = 18,仍然是> = 10)和

2)我需要从这个功能的范围中排除数字11和22。

我下面哪里出错了?

var x = 123;
var y = 456;
var z = 789;

var numberMagic = function (num) {
    var proc = num.toString().split("");
    var total = 0;
    for (var i=0; i<proc.length; i++) {
            total += +proc[i];
        };
    };

while(x > 9 && x != 11 && x != 22) {
    numberMagic(x);
    };
} else {
    xResult = x;
};

console.log(xResult);

//repeat while loop for y and z

5 个答案:

答案 0 :(得分:1)

以下是您的代码存在的问题

var x = 123;
var y = 456;
var z = 789;

var numberMagic = function (num) {
    var proc = num.toString().split("");
    var total = 0;
    for (var i=0; i<proc.length; i++) {
        total += +proc[i]; // indentation want awry
    }; // don't need this ; - not a show stopper
    // you're not returning anything!!!!
};

while(x > 9 && x != 11 && x != 22) {
    numberMagic(x); 
    }; // ; not needed
// because x never changes, the above while loop would go on forever
} else { // this else has no if
    xResult = x; // even if code was right, x remains unchanged
};

console.log(xResult);

希望以某种方式有所帮助

现在 - 这是一个有效的解决方案

var x = 123;
var y = 456;
var z = 789;

var numberMagic = function (num) {
    while (num > 9) {
        if (num == 11 || num == 22) {
            return num;
        }
        var proc = num.toString().split("");
        num = proc.reduce(function(previousInt, thisValueString) {
            return previousInt + parseInt(thisValueString);
        }, 0);
    }
    return num;
}

console.log(numberMagic(x));
console.log(numberMagic(y));
console.log(numberMagic(z));

答案 1 :(得分:0)

我不确定你想要什么.. 使用此功能可以将任何数字减少到一个数字

while(num > 9){
  if(num == 11 || num == 22) return;

  var proc = num.toString();
  var sum = 0;
  for(var i=0; i<proc.length; i++) {
    sum += parseInt(proc[i]);
  }
  num = sum;
}

你在看什么?

答案 2 :(得分:0)

我在Jsfiddle写了一个示例,您可以将任何给定的数字转换为单个数字:

示例输入: 551

  • 数组[5,5,1] - 添加最后2位数
  • 数组[5,6] - 添加最后2位数
  • 数组[1,1] - 添加最后2位数
  • 数组[2] - 输出

以下是实际代码:

var number = 1768;
var newNumber = convertToOneDigit(number);
console.log("New Number: " + newNumber);


function convertToOneDigit(number) {
    var stringNumber = number.toString();
    var stringNumberArray = stringNumber.split("");
    var stringNumberLength = stringNumberArray.length;

    var tmp;
    var tmp2;
    var tmp3;

    console.log("Array: " + stringNumberArray);
    console.log("Array Length: " + stringNumberLength);

    while (stringNumberLength > 1) {
        tmp = parseInt(stringNumberArray[stringNumberLength - 1]) + parseInt(stringNumberArray[stringNumberLength - 2]);
        stringNumberArray.pop();
        stringNumberArray.pop();
        tmp2 = tmp.toString();
        if (tmp2.length > 1) {
            tmp3 = tmp2.split("");
            for (var i = 0; i < tmp3.length; i++) {
                stringNumberArray.push(tmp3[i]);
            }
        } else {
            stringNumberArray.push(tmp2);
        }
        stringNumberLength = stringNumberArray.length;

        console.log("Array: " + stringNumberArray);
        console.log("Array Length: " + stringNumberLength);
    }
    return stringNumberArray[0];
}

答案 3 :(得分:0)

import sys
import msvcrt

passwor = ''
while True:
    x = msvcrt.getch()
    if x == '\r':
        break
    sys.stdout.write('*')
    passwor +=x

print '\n'+passwor

只需将它设为While循环,记住While循环它与For循环一样,只有在代码末尾添加计数器变量,就像使用Do {code}时一样(条件)只需要在末尾添加一个计数器变量,它将是相同的。只有变量的全局到循环,我的意思是来自外部。

EJ。

function addDigits(n) {
  let str = n.toString().split('');
  let len = str.length;
  let add,
      acc = 0; 
for (i=0; i<=len-1; i++) {
  acc += Number(str[i]); 
} 
 return acc;     
}
console.log( addDigits(123456789) );   //Output: 45

现在这是使用外部变量,不推荐使用..除非将var变为函数的本地变量。

答案 4 :(得分:-2)

请查看此解决方案

      var x = 123;
                        var y = 456;
                        var z = 789;
                        var numberMagic = function (num) {
                            var total = 0;

                            while (num != 0) {
                                total += num % 10;
                                num = parseInt(num / 10);
                            }
                            console.log(total);
                            if (total > 9)
                                numberMagic(total);
    else
return total;

                        }

//第一次调用函数                         numberMagic(Z);