如何使用递归[C]对数字的数字求和?

时间:2012-08-31 01:05:25

标签: c recursion sum digits

例如,数字是123,答案是6.只有递归!

3 个答案:

答案 0 :(得分: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));
}

这将返回数字的总和,如果数字为负,则否定该数字。

答案 1 :(得分: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);
}

答案 2 :(得分:-1)

这应该做你想要的:

int recurse( int number ) {
    if ( abs(number) < 10 ) return number;
    return number % 10 + recurse ( number / 10 );
}