检查数字和Java递归

时间:2018-11-13 20:33:44

标签: javascript

递归地寻找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"));

5 个答案:

答案 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"));