【问题标题】:Repeatedly adding digits of a number until the output has a single digit重复添加一个数字的数字,直到输出有一个数字
【发布时间】:2022-01-06 09:28:29
【问题描述】:

我有一个两位数(例如 29))并希望进一步减少到一位数。我怎么能在python中做到这一点?我应该在 while 循环中使用该函数吗? 例如

29 -> 11 -> 2

结果: [29,11,2]

x=input('Input digit: ')

result=0

box=[]


def add_two(x):
    bz=[]
    for i in str(x):
        bz.append(int(i))
        s=sum(bz)
        
    return s


box=[]    
a=0

while len(str(x))>1:

【问题讨论】:

  • 你可以简化你的问题以删除无用的东西(生日的东西),只保留最低限度;)
  • 我把问题简化了

标签: python function while-loop


【解决方案1】:

IIUC,您想通过执行十位和个位的加法将两位数 (29) 减少为一位数,重复直到小于 10。

注意。我这里用的是整数,如果从字符串开始,先转换成int:x = int(x)

让我们用divmod乘以10得到两个分量:

divmod(29, 10)
# 2, 9

sum他们:

sum(divmod(29, 10))
# 11

现在我们有了逻辑,让我们重复一遍:

x = 29
def reduce(x):
    return sum(divmod(x,10))

while x>9:
    x = reduce(x)
    
print(x)
# 2   # 2+9 -> 11 ; 1+1 -> 2
作为单个函数
def reduce_until(x):
    while x>9:
        x = sum(divmod(x,10))
    return x

reduce_until(29)
# 2
任意大小输入的通用函数:
def reduce_until(x):
    while x>9:
        total = 0
        while x>0:
            x,r = divmod(x, 10)
            total += r
        x = total
    return x

reduce_until(56789)
# 56789 -> 35 -> 8

reduce_until(99999999999992)
# 99999999999992 -> 119 -> 11 -> 2

【讨论】:

  • 干杯@mozway @nekomura!你们都是传奇
【解决方案2】:
import math

dob_d = 29
while not (0 <= dob_d <= 9):
    n = 0
    for i in range(math.ceil(math.log10(dob_d))):
        n += int(dob_d / (10 ** i) % 10)
    dob_d = n

print(dob_d)

【讨论】:

    猜你喜欢
    • 2016-02-07
    • 1970-01-01
    • 2014-05-18
    • 1970-01-01
    • 2021-05-14
    • 2013-02-25
    • 1970-01-01
    • 2018-08-23
    • 2011-08-30
    相关资源
    最近更新 更多