用递归求最后一位数字和

2024-06-23 19:53:12 发布

您现在位置:Python中文网/ 问答频道 /正文

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

示例:
对于输入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)))

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

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


Tags: 函数字符串示例numberreturnifdef数字
3条回答

您可以检查数字是否大于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)))

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

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

甚至更短:

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

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

通过1的移位只是为了使剩余类09表示

相关问题 更多 >

    热门问题