我必须在每次迭代时逐步连接给定的数字,以便它返回一个sum和连接的字符串。这是我的尝试:
def digit_sum_from_letters(x):
a = int("%s" % x)
b = int("%s%s" % (x,x))
c = int("%s%s%s" % (x,x,x))
d = int("%s%s%s%s" % (x,x,x,x))
return a+b+c+d
print digit_sum_from_letters(9)
返回11106
但是我需要为任何给定的整数生成总和,所以我需要一个循环,但是我被卡住了。
谢谢!
答案 0 :(得分:5)
鉴于digit
和n
(例如,digit=4
和n=3
是4 + 44 + 444
),您只需生成一系列1,并将其乘以总和digit
。
digit = 4
n = 3
# 1, 11, 111
ones = [ int("1" * i) for i in range(1, n+1)]
# 4 + 44 + 444 = 4 * (1 + 11 + 111)
answer = digit * sum(ones)
答案 1 :(得分:4)
这应该有效:
>>> def digit_sum(x):
lst = [str(x)*i for i in range(1,x+1)]
print '+'.join(lst)
return sum(map(int, lst))
>>> digit_sum(7)
7+77+777+7777+77777+777777+7777777
8641969
>>> digit_sum(9)
9+99+999+9999+99999+999999+9999999+99999999+999999999
1111111101
>>> digit_sum(3)
3+33+333
369
答案 2 :(得分:2)
有几种方法可以做到这一点。我将从与您最相似的解决方案开始,如果您愿意,我可以采用更快的方式:)。
def digit_sum_from_letters(digit,count):
suma=0
cur=digit
for _ in xrange(count):
suma+=int(cur)
cur+=digit
return suma
答案 3 :(得分:2)
只是为了好玩:
def f(n):
return n*int("123456789"[:n])
它给出了:
1 -> 1
2 -> 24
3 -> 369
4 -> 4936
5 -> 61725
6 -> 740736
7 -> 8641969
8 -> 98765424
9 -> 1111111101
答案 4 :(得分:2)
谁告诉你你需要一个循环?不要听他们说
def fn(n):
x,z = n,10
return x*(z*(z**n-1) // (z-1) - n) // (z-1)
print(fn(1)) # 1
print(fn(2)) # 24
print(fn(3)) # 369
print(fn(4)) # 4936
编辑:很遗憾,他们也要求你使用表达式字符串。在那一部分,你必须遗憾地使用一个循环
答案 5 :(得分:1)
以下函数将执行,n是您的数字(4)m是迭代次数(4,44,444,4444,...)。
def digit_sum_from_letters(n, m):
sum = 0
# this is the multiplier.
# throughout the iterations it will be 1, 11, 111, 1111 ...
currMult = 1
for i in range(0,m):
sum += n*currMult
currMult = currMult*10 + 1
return sum
示例运行:
>>> sumLetters(9,4 )
11106
>>>
答案 6 :(得分:1)
def sum_n(x, n):
s = 0
for i in range(1,n+1):
s += int(('%d'*i) % tuple([x]*i))
return s
In [0]: print(sum_n(9,4))
Out[0]: 11106
答案 7 :(得分:1)
您可以使用列表压缩来完成:
x = 9
c = 4
sum([int(str(x) * i) for i in xrange(1,c + 1)])
11106