单个数字大数字的数字总和失败

时间:2016-10-04 08:26:20

标签: python-3.x recursion while-loop

我正在尝试一个问题,我们应该递归计算一个数字的总和,直到剩下一个数字。我的程序失败了2个非常具体的测试用例(10 ^ 15)个数字。逻辑是为较小的输入工作(<10 ^ 15)。

这是我的代码

import sys
test_cases=int(input())

number_single=list(range(0,10))

while(test_cases!=0):
    digit_sum=0
    summation1=0
    summation2=0
    sub_case=int(input())

    while(sub_case!=0):
        length,number=map(int,sys.stdin.readline().split())
        summation=length*number
        summation1+=summation

        sub_case=sub_case-1
        digit_sum,digit_sum1=summation1,summation1



            while(digit_sum not in number_single):
             digit1_sum=digit_sum%10
             digit_sum=int(digit_sum/10)
             digit_sum=digit1_sum+digit_sum

             print(digit_sum)
    test_cases=test_cases-1

如果数字为17654,那么所需输出的格式为输出为5。

2 个答案:

答案 0 :(得分:1)

在没有其他理解的情况下,我会提供一些基本代码,可以帮助您清除一些额外的设计。

首先,这被称为数字的“数字根”。这个过程的旧术语是“淘汰9”。使用模数运算符很简单:

target = 314159265358979323846364338327950197169

dig_root = target % 9
if dig_root == 0:
    dig_root = 9
print ("digital root", dig_root)

但是,如果您应该通过添加数字的“手动”过程,那么请利用语言的类型功能。将其转换为字符串,将每个字符转换为单个数字的整数,然后添加它们。重复直到总和不超过9。

while target > 9:
    target_str = str(target)
    target = 0
    for c in target_str:
        target += int(c)
print (target)

使用列表推导,这将减少为

while target > 9:
    target = sum([int(c) for c in str(target)])
    print (target)

答案 1 :(得分:0)

我已经解决了这个问题。测试用例没有通过,因为我没有使用楼层划分(//)而是我正在执行正常划分并取整数结果。这导致程序失败的那些2大案例。