-1

我正在尝试创建一个函数,它将所有数字相加
并返回汇总数字的总和。

示例:
对于输入getNumValue(1589)输出
将是:5 因为:1 + 5 + 8 + 9 = 23 和 2 + 3 = 5 所以输出将是 5 因为我们无法将其拆分为更多数字。 我确实设法创建了一个总结数字的递归函数:






def getNumValue(number: int):
    if number == 0:
        return 0
    return (number % 10 + getNumValue(int(number / 10)))

但我似乎无法将它用于我的事业。

顺便说一句
,我不想​​使用任何字符串
而且我正在尝试使用递归到目前为止没有运气。
我敢打赌这是一个我不熟悉的已知数学问题。
有什么建议吗?

4

5 回答 5

6

更短:

def getNumValue(number: int): return ((number-1) % 9) + 1

数字总和始终与原始十进制数在同一个余数类 mod 9 中,这递归地应用,因此将其减少到一位就是除以 9 下的余数。

移位1仅用于剩余类0由 表示的目的9

于 2021-07-25T13:13:49.223 回答
2

您可以在返回答案之前进行最终检查。

def getNumValue(number: int):
    if number == 0:
        return 0
    answer = (number % 10 + getNumValue(int(number // 10)))
    if answer < 10:
        return answer
    return getNumValue(answer)


print(getNumValue(15899999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999))

输出 :

9
于 2021-07-25T12:14:48.433 回答
1

您可以检查 number 是否大于 9。如果是,则再次调用该函数:

def getNumValue(number: int):
    if number == 0:
        return 0
    j=(number % 10 + getNumValue(int(number // 10)))
    if j>9:
        return getNumValue(j)
    return j
print(getNumValue(getNumValue(1589)))
于 2021-07-25T12:17:17.093 回答
0

没有递归:

def getNumValue(number: int) -> int:
    while True:
        total = 0
        while number:
            total += number % 10
            number //= 10
        number = total
        if total <= 9:
            return total
>>> getNumValue(number)
5
于 2021-07-25T12:19:34.707 回答
0

pythonic递归:)

def getNumValue(number=1589):
    ans = number % 10 + getNumValue(int(number / 10)) if number else 0
    return getNumValue(ans) if ans > 10 else ans

输出

5
于 2021-07-25T12:40:02.553 回答