【问题标题】:A while loop to add the digits of a multi-digit number together? (Javascript)将多位数字的数字相加的while循环? (Javascript)
【发布时间】:2015-07-23 10:17:48
【问题描述】:

我需要将一个数字的数字相加(例如 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

【问题讨论】:

    标签: javascript function while-loop numbers digits


    【解决方案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));
    

    【讨论】:

    • 这非常有帮助。非常感谢。
    【解决方案2】:

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

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

    这是你在看的吗?

    【讨论】:

    • 是的,就是这样。谢谢。现在我想知道为什么我的代码不起作用。
    【解决方案3】:

    我在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];
    }
    

    【讨论】:

      【解决方案4】:
      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
      

      只需将其设为 While 循环,记住 While 循环与 For 循环相同,只是在代码末尾添加计数器变量,与 Do{code}while(条件)只需要在最后添加一个计数器变量就可以了。只是变量对于循环来说是全局的,我的意思是来自外部。

      Ej.

      let i = 0; //it's global to the loop, ( wider scope )
      
      while (i<=x) {
        //Code line;
        //Code line;
        //Code line;
        //Code line;
      
        i++
      }
      

      现在这是与外部变量一起使用,不建议这样做.. 除非该 var 是函数的本地变量。

      【讨论】:

        【解决方案5】:

        请也看看这个解决方案

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

        【讨论】:

        • 你也没有从函数中返回任何东西,使它无用
        猜你喜欢
        • 2023-04-07
        • 1970-01-01
        • 2018-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-22
        • 2016-08-05
        • 1970-01-01
        相关资源
        最近更新 更多