私は初心者です。
数字のすべての桁の合計を計算する小さなアプリを作りたいです。
たとえば、2568という数字がある場合、アプリは21と等しい2 + 5 + 6 + 8を計算します。最後に、21桁の合計を計算し、最終結果は3になります。
私を助けてください
基本的に、整数のすべての部分の合計を取得する2つのメソッドがあります。
数値演算を使用
数を取り、残りの10を作成して追加します。次に、10で割った数値の整数部分を取ります。次に進みます。
var value = 2568,
sum = 0;
while (value) {
sum += value % 10;
value = Math.floor(value / 10);
}
console.log(sum);
文字列操作を使用
数値を文字列に変換し、文字列を分割して、すべての数字を含む配列を取得し、すべての部分に対してreduceを実行し、合計を返します。
var value = 2568,
sum = value
.toString()
.split('')
.map(Number)
.reduce(function (a, b) {
return a + b;
}, 0);
console.log(sum);
値を返すには、value
プロパティを追加する必要があります。
rezultat.value = sum;
// ^^^^^^
function sumDigits() {
var value = document.getElementById("thenumber").value,
sum = 0;
while (value) {
sum += value % 10;
value = Math.floor(value / 10);
}
var rezultat = document.getElementById("result");
rezultat.value = sum;
}
<input type="text" placeholder="number" id="thenumber"/><br/><br/>
<button onclick="sumDigits()">Calculate</button><br/><br/>
<input type="text" readonly="true" placeholder="the result" id="result"/>
モジュロ9演算を使用したこの簡単なアプローチはどうですか?
function sumDigits(n) {
return (n - 1) % 9 + 1;
}
値の桁の合計を計算する場合。
var value=2568;
while(value > 9){
value=sum(value);
}
console.log(value)
function sum(value){
var sum=value.toString().split("")
.reduce(function(a,b) {
return a+parseInt(b);
},0);
return sum;
}
var value = -2568;
console.log(Math.abs(value % 9));
答えは3です
これは私がこれを解決した方法です:
function sumOfDigits(number) {
Math.abs(number).toString().split('').reduce(function(a,b){return +a + +b}, 0);
}
これは戻ります
sumOfDigits(10); // Returns 1
sumOfDigits(-32); // Returns 5
値が10より大きい場合、関数をループします
たとえば、55555という数字がある場合、アプリは25と等しい5 + 5 + 5 + 5 + 5を計算します。最後に、25桁の合計を計算し、最終結果は7になります。
let value =55555; // => 25 => 7
function sumOfEachDigits(number) {
return Math.abs(number).toString().split('').reduce(function(a,b){return +a + +b}, 0);
}
while(value > 9){
value=sumOfEachDigits(value);
}
console.log(value); // Result is 9
var value = 2568,
sum = 0;
while (value) {
sum += value % 10;
value = Math.floor(value / 10);
}
console.log(sum);
以下は、NaNシナリオも処理するソリューションです。
function add(num) {
var sum = 0;
do {
sum = sum + num%10;
num = Math.floor(num/10);
} while (num);
return sum;
}
console.log(add())//NaN
console.log(add(1234))//10
do ... whileループは、whileループよりもこの問題に適しています。