在不使用递归的情况下创建函数

时间:2015-04-20 16:51:20

标签: c++ recursion

所以我创建了一个函数,当我输入一组整数时,它将显示其结果示例(1234 = 10),但我不允许使用递归,

我只是在没有递归的情况下迷失了怎么做它可能很简单,但我看不到它。

这是我使用C ++的原始代码:

#include <iostream>

using namespace std;

int sumofdigits(int n) {
    if (n < 10) return n;
    return n % 10 + sumofdigits(n / 10);
}

int main() {
    int number;
    while (true) {
        cout << "Please, enter numbers (0 to exit): ";
        cin >> number;
        if (!number) break;
        cout << "your result is " << sumofdigits(number) << endl;
    }
    return 0;
}

2 个答案:

答案 0 :(得分:2)

这里是等效的使用循环:

unsigned int sum_of_digits(unsigned int value)
{
  unsigned int sum = 0U;
  while (value > 0)
  {
    sum = sum + value % 10;
    value = value / 10;
  }
  return sum;
}

编辑1:使用字符
对于其中一些分配,该数字最好保存为一串数字字符。这允许程序处理太大而不适合intlong intlong long类型的数字。

unsigned int sum_of_digits(const std::string& number)
{
  unsigned int sum = 0U;
  const unsigned int length = number.length();
  for (unsigned int i = 0U; i < length; i++)
  {
    unsigned int digit = number[i] - '0'; // Convert from character to number.
    sum += digit;
  }
  return sum;
}

注意:此解决方案可能更快,因为它不使用除法功能,这在某些平台上可能是一项昂贵的操作。

答案 1 :(得分:0)

您需要使用循环:

int sumofdigits(int n) {
    // will hold the sum at the end of the loop
    int sum = 0;
    while(n>0) {
        sum += n%10; // add current digit
        n /= 10; // drop the digit we just added
    }
    return sum;
}

因此,使用输入n=1234,循环将执行以下步骤:

sum=0, n=1234
sum=4, n=123
sum=4+3, n=12
sum=4+3+2, n=1
sum=4+3+2+1, n=0
Exit the loop when n=0