【问题标题】:how to calculate digits of a number without the right digit如何计算没有正确数字的数字的位数
【发布时间】:2018-06-17 13:23:57
【问题描述】:

我试图在递归中总结一个数字的数字而没有正确的数字。 例如,如果输入为 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

【问题讨论】:

  • sumDigits(n/10) 将删除正确的数字,但您需要修改函数和return num; 而不是return 0;

标签: c++ recursion


【解决方案1】:

这有点像正数。要获得纯递归,一种方法是通过以某种方式标记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));

【讨论】:

    【解决方案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);
    }
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-07
          相关资源
          最近更新 更多