递归地寻找Javascript解决方案,以获取数字中所有数字的总和,直到得到一位数字为止
例如,对于数字为“ 55555”,所有数字的总和为25。因为这不是一个数字,所以将2和5相加,结果为7。
我根据算法尝试了以下解决方案。
function getSum(n) {
let sum = 0;
while(n > 0 || sum > 9)
{
if(n == 0)
{
n = sum;
sum = 0;
}
sum += n % 10;
n /= 10;
}
return sum;
}
console.log(getSum("55555"));
答案 0 :(得分:0)
这可以完成工作,但是我几乎可以肯定有一个漂亮的单行解决方案,但我暂时还没有看到。
function singleDigitSum(str) {
str = [...str].reduce((acc, c) => { return Number(c) + acc }, 0)
while (str.toString().length > 1) {
str = singleDigitSum(str.toString());
}
return str
}
console.log(singleDigitSum("55555"))
说明:
作为函数的第一步,您将归约函数的结果重新分配给传递给该函数的参数,该函数将String
中的所有数字相加。为了能够使用Array.prototype.reduce()
功能,我正在使用str
将您的array
散布到[...str]
中。
然后,使该减速器返回的数值多于一位的次数,然后冲洗并重复。当while循环退出时,结果为一位数字,可以return
加。
答案 1 :(得分:0)
function checSumOfDigit(num, sum = "0") {
if (num.length == 1 && sum.length !== 1) {
return checSumOfDigit(Number(sum) + Number(num) + "", "0");
} else if (num.length == 1) {
return Number(sum) + Number(num);
}
num = num.split("")
sum = Number(sum) + Number(num.pop());
return checSumOfDigit(num.join(""), sum + "")
}
console.log(checSumOfDigit("567"));
console.log(checSumOfDigit("123"));
console.log(checSumOfDigit("55555"));
此代码可能对您有帮助
答案 2 :(得分:0)
如果您需要递归,请尝试此
function CheckDigitSum(number) {
let nums = number.split('');
if (nums.length > 1) {
let sum = 0;
for (let i = 0; i < nums.length; i++) {
sum += Number(nums[i]);
}
return CheckDigitSum(sum.toString());
} else {
return parseInt(nums[0], 10);
}
}
答案 3 :(得分:0)
您在这里:
function createCheckDigit(num) {
var output = Array.from(num.toString());
var sum = 0;
if (Array.isArray(output) && output.length) {
for ( i=0; i < output.length; i++){
sum = sum + parseInt(output[i]);
}
if ((sum/10) >= 1){
sum = createCheckDigit(sum);
}
}
return sum;
}
答案 4 :(得分:0)
这可以通过递归函数来计算。
function createCheckDigit(membershipId) {
// Write the code that goes here.
if(membershipId.length > 1){
var dgts = membershipId.split('');
var sum = 0;
dgts.forEach((dgt)=>{
sum += Number(dgt);
});
//console.log('Loop 1');
return createCheckDigit(sum + '');
}
else{
//console.log('Out of Loop 1');
return Number(membershipId);
}
}
console.log(createCheckDigit("5555555555"));