如何计算没有正确数字的数字的数字

时间:2018-01-08 14:34:30

标签: c++ recursion

我试图在递归中用正确的数字来汇总数字的数字。 例如,如果输入为1234,则输出应为6(1 + 2 + 3)。 如果输入只有1位数,则该函数应返回0.

我不确定如何同时执行这两项操作:计算数字,从结果中删除最后一位数字 如果输入是一个数字,那么它也应该返回0。 我的代码总结了除左数字以外的所有数字。如果我尝试使用revNum函数,那么对于数字'100',例如,结果为0而不是1。 需要任何帮助请:)

int main()
{
    int num = 1234;
    cout << partSum(num);
}
int sumDigits(int num)
{
    if (num<10)
        return 0;
    return num%10 + sumDigits(num / 10);
}

输出应为:6

4 个答案:

答案 0 :(得分:2)

函数sumDigits应该对数字求和,函数partSum只是将数字的数字除以10(删除最后一位数字)

int sumDigits(int num)
{
  if (num<10)
    return num;
  return num%10 + sumDigits(num / 10);
}

int partSum(int num)
{
  return sumDigits(num/10);
}

int main()
{
  int num = 1234;
  cout << partSum(num);
}

答案 1 :(得分:1)

sumDigits(n/10)会移除正确的数字,但您需要修改该功能并return num;而不是return 0;

int sumDigits(int num)
{
    if (num<10)
        return num;
    return num%10 + sumDigits(num / 10);
}

int main()
{
    int num = 1234;
    cout << sumDigits(num/10);
}

答案 2 :(得分:0)

你的意思是这样的吗?请注意,您不需要递归。

int sumDigits(int num)
{
  int sum = 0;
  while (num != 0) {
    sum += num % 10;
    num /= 10;
  }
  return sum;
}

int main()
{
  int num = 1234;
  cout << sumDigits(num / 10);
}

答案 3 :(得分:0)

对于正数而言这是一个黑客攻击。要获得纯粹的递归,一种方法是通过以某种方式标记num来通知调用它们不是第一次调用,在这种情况下将其变为负数。

JavaScript代码:

function sumDigits(num){
  if (num == 0)
    return 0;
      
  if (num < 0){
    if (num > -10)
      return num;
    else
      return num % 10 + sumDigits(~~(num / 10));
        
  } else {
     return -sumDigits(~~(-num/10));
  }
}

console.log(sumDigits(1234));