所以我创建了一个函数,当我输入一组整数时,它将显示其结果示例(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;
}
答案 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:使用字符
对于其中一些分配,该数字最好保存为一串数字字符。这允许程序处理太大而不适合int
,long int
或long 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