簡體   English   中英

一個while循環將多位數的數字加在一起? (JavaScript)

[英]A while loop to add the digits of a multi-digit number together? (Javascript)

我需要將數字的位數加在一起(例如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;
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));

我不確定您要什么。通過此功能,您可以將任何數字減少到一位數字

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

你在看什么嗎

我在Jsfiddle編寫了一個示例,您可以將任何給定的數字轉換為一個數字:

輸入示例: 551

  • [5,5,1]的數組-加最后兩位
  • [5,6]的數組-加最后兩位
  • [1,1]的數組-加最后兩位
  • [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];
}
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(condition)Only相同。需要在末尾添加一個計數器變量,其變量將相同。 我的意思是,僅此變量的全局變量來自外部。

j

let i = 0; //it's global to the loop, ( wider scope )

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM