试图找到两个数字之间的数字总和

时间:2019-04-13 23:02:18

标签: python

试图找出如何使用python中的函数查找两个数字(包括这些数字)之间的数字总和。

我尝试对每个单独的参数进行递归,然后减去它们以补偿中间的数字。然后,我将这两个值相加,得出了我的总和,这对每个参数都是错误的,除非数字低于10。不确定解决此问题的正确方法,请帮忙。

def sum_digits(a, b):
"""sum of digits between two numbers"""
  sum = 0
  ones = a - b
  if ones < 0:
    ones = ones * -1


  if a >= 10 and b >= 10:
    sum += ones


  while a > 0 and b > 0:
    d = a % 10 + b % 10
    a = a // 10
    b = b // 10
    sum += d

  return sum

6 个答案:

答案 0 :(得分:0)

这行吗?

这基本上是通过使数字在一定范围内来实现的。现在,由于endrange通常少一,因此我手动向endrange

添加1
startNumber = 1
endNumber = 5
total = 0;
for i in range(startNumber,endNumber+1):
    print(i)
    total += i

print total

谢谢

答案 1 :(得分:0)

def sum_digits(a, b):
    sum = 0
    for i in range(a,b+1):
        for e in (str(i)):
            sum += int(e)
    return sum

print(sum_digits(17, 20))

答案 2 :(得分:0)

只需对从第一个参数到最后一个参数的每个数字的数字总和求和。有关进行每个数字总和的更多方法,请参见Sum the digits of a number - python

def sum_digits(a, b):
    total = 0
    for number in range(a,b+1):
        total += sum(int(digit) for digit in str(number))
    return total

答案 3 :(得分:0)

我的方法:

def sum_of_products(lst, s, f):
    result = 0
    for i, item in enumerate(range(s, f+1)):
        lst[i] = list(map(int, str(item)))
        result += sum(lst[i])
    return result

lst = [x for x in range(0, 10)]
x = sum_of_products(lst, 14, 20)
print(x)

答案 4 :(得分:0)

您在这里:

def sum_digits(a, b):
    sum = 0
    for i in range(a, b + 1):
        number = i
        while (number > 0):
            sum += number % 10
            number = number // 10
    return sum

print(sum_digits(17, 20))

答案 5 :(得分:0)

我的2分钱要指出,应该有一个不涉及整个范围内循环的封闭式公式。 例如,我们知道n个数字的总和是

n *(n-1)/ 2

对于数字0至9的总和为45 == 9 * 10/2

01
02
03
04
05
06
07
08
09

然后接下来的10个数字会变得更加复杂

10
11
12
13
14
15
16
17
18
19

总和是十(十个十倍)加45的10倍。 然后我们可以:

for 00..09 we have 0*10+45
for 10..19 we have 1*10+45
for 20..29 we have 2*10+45
...
for d0..d9 we have d*10+45

我实在太懒惰,无法自己得出好的公式,因此我用Google搜索了它。以下是我发现的内容:

如果我们事先知道位数,则公式很简单。例如,根据https://oeis.org/A007953,如果n的数量小于100,则闭式公式为:

   For n < 100 equal to (floor(n/10) + n mod 10) 

对于任意数量的数字,此处有示例代码:https://www.geeksforgeeks.org/count-sum-of-digits-in-numbers-from-1-to-n/

dsum(10**d - 1) = dsum(10**(d-1) - 1) * 10 + 45*10**(d-1) 

要计算范围的数字总和,只需找到差异

dsum(b) - dsum(a)