一个while循环将多位数的数字相加?(Javascript)

一个while循环将多位数的数字相加?(Javascript),javascript,function,while-loop,numbers,digits,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(""

我需要将一个数字的位数相加(例如,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
var x=123;
变量y=456;
var z=789;
var numberMagic=函数(num){
var proc=num.toString().split(“”);
var合计=0;
对于(变量i=0;i 9&&x!=11&&x!=22){
数字逻辑(x);
};
}否则{
xResult=x;
};
console.log(xResult);
//对y和z重复while循环

我不确定你想要什么。。 使用此功能,您可以将任何数字减少为一个位数

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;
}
while(num>9){
如果(num==11 | | num==22)返回;
var proc=num.toString();
var总和=0;

对于(var i=0;i,也请查看此解决方案的结果

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

以下是代码的问题

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);
我在上写了一个示例,您可以将任何给定的数字转换为一位数:

输入示例: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];
}
var编号=1768;
var newNumber=convertToOneDigit(数字);
控制台日志(“新编号:+newNumber”);
函数转换为数字(数字){
var stringNumber=number.toString();
var stringnumberraray=stringNumber.split(“”);
var stringNumberLength=stringNumberArray.length;
var-tmp;
var-tmp2;
var-tmp3;
log(“数组:+stringNumberArray”);
log(“数组长度:“+stringNumberLength”);
while(stringNumberLength>1){
tmp=parseInt(stringnumberray[stringNumberLength-1])+parseInt(stringnumberray[stringNumberLength-2]);
stringNumberArray.pop();
stringNumberArray.pop();
tmp2=tmp.toString();
如果(tmp2.length>1){
tmp3=tmp2。拆分(“”);
对于(变量i=0;i
函数添加数字(n){
设str=n.toString().split(“”);
设len=str.length;
再加上,,
acc=0;

对于(i=0;iYep,就是这样。谢谢。现在我想知道为什么我的代码不起作用。你也没有从函数返回任何东西,使它变得无用。这非常有用。非常感谢。
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];
}
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
let i = 0; //it's global to the loop, ( wider scope )

while (i<=x) {
  //Code line;
  //Code line;
  //Code line;
  //Code line;

  i++
}