【问题标题】:Recursive digits sum without the right digit没有正确数字的递归数字总和
【发布时间】:2022-01-14 15:37:00
【问题描述】:

我需要编写一个递归函数,它将给定数字的所有数字相加,除了最右边的数字。 例如:56643 -> 5 + 6 + 6 + 4 = 21

或者如果数字是 5:总和将为 0,因为我们不会对正确的数字求和(在这个例子中它也是我们唯一的数字)。

我尝试编写递归函数,但没有成功。

int sumDig(int num) {
    if (num < 10)
        return 0;
    return (num % 10 + sumDig(num / 10));
}

谢谢大家

【问题讨论】:

    标签: c recursion


    【解决方案1】:

    您编写的函数将打印除第一个数字之外的所有数字的总和,这与您想要实现的相反。 考虑以下函数:-

        int sumDig(int num) {
            if (num > 0)
                return (num % 10 + sumDig(num / 10));
            else
                return 0;
        }
    

    你可以直接用num/10调用这个函数来实现你的用例。或者,您可以使用包装函数。

    【讨论】:

    • 但它没有基本情况
    • Anuneet Anand,这个答案有无限递归。
    • 因此,除第一位数字外的所有数字相加与除最后一位数字外的所有数字相加是相反的。很有趣。
    【解决方案2】:

    因为基本情况是num&lt;10,所以您实际上是在添加除有效数字之外的所有数字。

    要获取除最后一个之外的所有数据,可以通过让函数获取倒数第二个数字并将其添加到递归调用的结果中来完成。

    int sumDig(int num) {
        if (num == 0) {
            return 0;
        }
        return ((num / 10) % 10) + sumDig(num / 10);
    }
    

    【讨论】:

    • 如果 if (num &lt; 10) 更改为 if (num == 0),我怀疑你的漂亮解决方案也适用于 num &lt; 0,假设 sum_Dig(-56643) 应该是 -21。
    • @chux-ReinstateMonica 好主意。已更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 2013-12-31
    • 2020-03-16
    • 2020-03-19
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    相关资源
    最近更新 更多