试图找出如何使用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
答案 0 :(得分:0)
这行吗?
这基本上是通过使数字在一定范围内来实现的。现在,由于endrange
通常少一,因此我手动向endrange
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)