数字总和,直到达到一位数字

时间:2019-11-30 19:32:56

标签: python

我设置了一种算法,该算法将数字的总和加起来,但是直到一位数字我都无法实现。它只工作一步。

例如:

a=2, b=8
a^b=256 = 6+5+2 = 13

但是我想达到一位数,例如:

a^b=256 = 6+5+2 = 13 = 3+1 = 4

在下面您可以看到我的代码。

a = int(input("Enter a value"))
b = int("Enter second value")

number = pow(a, b)
sum= 0
while float(number) / 10 >= .1:

    m = number % 10
    sum += m
    number = number // 10

    if float(number) / 10 > .1:
       print(m, end=" + ")
    else:
       print(m, "=", sum)

4 个答案:

答案 0 :(得分:4)

您在这里:

n = 256
while n > 9:
    n = sum(int(i) for i in str(n))

print(n)

那是怎么回事? str(n)n转换为字符串,可以迭代python中的字符串,因此我们可以逐位访问。我们在生成器中执行此操作,将每个数字转换回整数int(i) for i in str(n),我们使用sum对生成器中的元素求和。我们重复此过程,直到n为一位数字为止。

添加了一个明确给出计算结果的解决方案:

def sum_dig(n):
    _sum = sum(int(i) for i in str(n))
    explained = "+".join(list(str(n)))
    return _sum, explained
n = 256
s = ""
while n > 10:
    n, e = sum_dig(n)
    s+= f'{e}=' 

s += str(n)
print(s)

产量:

2+5+6=1+3=4

答案 1 :(得分:1)

这将产生要求OP格式的输出:

a = int(input("Enter a value: "))
b = int(input("Enter second value: "))

n = pow(a, b)
while n >= 10:
    nums = [i for i in str(n)]
    op = "+".join(nums)
    n = eval(op)
    print("{}={}".format(op, n))

逻辑:

  1. 将输入存储在单个数字数组中作为字符串。
  2. 使用"+".join(nums)-为输出打印创建求和字符串。
  3. 使用eval(op)来计算总和,该{@ 1}适用于字符串(内置函数)-存储在n中。
  4. 打印求和字符串及其等同内容。

输出:

Enter a value: 2
Enter second value: 8
2+5+6=13
1+3=4

Enter a value: 2
Enter second value: 6
6+4=10
1+0=1

Enter a value: 2
Enter second value: 50
1+1+2+5+8+9+9+9+0+6+8+4+2+6+2+4=76
7+6=13
1+3=4

答案 2 :(得分:1)

您可以尝试一下。

a = int(input("Enter a value"))
b = int(input("Enter second value"))

number = pow(a, b)
result = str(a)+'^'+str(b) + ' = ' + str(number)
while number > 9:
    digit_sum = sum(map(int, str(number)))
    result += ' = ' + '+'.join(str(number)) + ' = ' + str(digit_sum)
    number = digit_sum

print ( result )

对于a = 2,b = 8的结果:

2^8 = 256 = 2+5+6 = 13 = 1+3 = 4

答案 3 :(得分:0)

sol = 0
if (a^b)%9==0:
    sol = 9
else:
    sol = (a^b)%9