例如,数字是 123,答案是 6。只有递归!
问问题
3098 次
3 回答
4
虽然@SamGrondahl 走在正确的轨道上,但不幸的是,如果您输入一个负数,它会产生意想不到的结果。这应该适用于负数:
int sumdigits(int number) {
int sign = number < 0 ? -1 : 1;
number = sign * number; // abs the number
if (number < 10)
return sign * number;
else
return sign * (number % 10 + sumdigits(number / 10));
}
这将返回数字的总和,如果数字为负数,则取反。
于 2012-08-31T01:14:40.633 回答
1
正确答案比乍一看更难实现,因为 的否定INT_MIN
可能不适合int
. 发布的解决方案在很大程度上可以通过更改它们的实现以unsigned int
在递归期间使用。下面是一个替代方案。
int sum_digits_recursively (char digits[], int i) {
if (i == 0 && digits[i] == '-') return -sum_digits_recursively(digits, 1);
if (digits[i] == '\0') return 0;
return (digits[i]-'0') + sum_digits_recursively(digits, i+1);
}
int sum_digits (int x) {
char digits[sizeof(x) * CHAR_BIT];
snprintf(digits, sizeof(digits), "%d", x);
return sum_digits_recursively(digits, 0);
}
于 2012-08-31T01:24:24.780 回答
-1
这应该做你想要的:
int recurse( int number ) {
if ( abs(number) < 10 ) return number;
return number % 10 + recurse ( number / 10 );
}
于 2012-08-31T01:09:43.253 回答